Skip to content

Instantly share code, notes, and snippets.

@Khoding
Last active November 5, 2021 11:24
Show Gist options
  • Save Khoding/4c663446ae32f92d7e41e3610cb7769c to your computer and use it in GitHub Desktop.
Save Khoding/4c663446ae32f92d7e41e3610cb7769c to your computer and use it in GitHub Desktop.
CIE 335

Java

Explications

CCO

  • Théorique
    • Notes (par lui)
  • Pratique
    • Pas de projets complets
    • Pas d’algorithmie
    • Comprendre la phylosophie Android (OS)

Projets durant le CIE

  1. Quiz

  • Fonctionnel
  1. Voyage d’étude

  • Amsterdam
  1. Android OS

  • En anglais car nom de classes
    Activity
    Intent
    Layout
    View
  1. Material Design

  • Design des apps
    Quantificateur
  1. Tests

  • Base
    Unitaires
  1. Utilisateurs

  • Pattern UI (Interface utilisateurs) / UX (Experience utilisateurs)
    Deux Activités
    Toolbar
    Fragments (Responsive-ish)
    Adapter
    Tabs (PageViewer)
    RecyclerView
    Navigation Drawer
    SQLite

Notes

Application

  • APK

  • App
    Manifests (Config project)
    ATTENTION, si le fichier est incomplet le projet ne se compile pas
  • build.gradle (Module: app)
    minSdkVersion 21
    versionCode 1 - Publication
    versionName “1.0” - Publication
    dependencies - Ajout de lib
java
Code (Prog + tests)
  • res
    • Ressources de l’app
      Icônes
      Images
      Fichiers
      Layout
      Couleurs
XML
Interface app
<LinearLayout xmlns: … --> root (racine)
…Layout --> (conteneur de mise en page)
LinearLayout
  1. Permet de placer les view les uns en dessus des autres

  2. Permet de placer les view les uns à droite des autres

  3. android:orientation=“vertical”

  4. android:orientation=“horizontal”

android:layout_width
Lageur du composant
Layout_ --> Défini par rapport au conteneur
largeur, hauteur : match_parent (tout l’espace du conteneur)
wrap_content : (espace de son propre contenu)
dimensions : dp
TextView
Label

android:background="#f00"
Couleur de fond
Notation hex

android:padding=“20dp”
Marge intérieur

android:layout_margin=“8dp”
Marge extrérieur

android:text
Text affiché

EditText
Zone de saisie

android:layout_marginStart=“20dp”
Marge gauche

android:layout_marginEnd=“20dp”
Marge droite

android:hint=“Merci de saisir votre prénom” />
Placeholder (WEB) / Message d’invite

Button
Bouton

android:layout_gravity=“center”
Positionnement dans le conteneur

android:layout_marginTop=“20dp”
Marge du dessus

android:id="@+id/…"
Identifiant pour accéder à la View depuis le code
activity_game
<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout  
  xmlns:android="http://schemas.android.com/apk/res/android"  
  xmlns:tools="http://schemas.android.com/tools"  
  android:layout_width="match_parent"  
  android:layout_height="match_parent"  
  android:orientation="vertical"  
  tools:context=".controller.GameActivity">  

<TextView android:id="@+id/activity_game_question_txt"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="2"
android:textColor="@color/colorPrimary"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:layout_marginStart="15dp"
android:layout_marginEnd="15dp"
android:textSize="18sp"
android:textStyle="bold"
android:text="Question ?"
android:gravity="center" />

<Button android:id="@+id/activity_game_answer1_btn"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:textColor="@color/colorAccent"
android:layout_margin="5dp"
android:background="@android:color/white"
android:text="Answer 1"
android:textSize="20sp"/>

<Button android:id="@+id/activity_game_answer2_btn"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_margin="5dp"
android:layout_weight="1"
android:background="@android:color/white"
android:textColor="@color/colorAccent"
android:text="Answer 2"
android:textSize="20sp" />

<Button android:id="@+id/activity_game_answer3_btn"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:textColor="@color/colorAccent"
android:layout_margin="5dp"
android:background="@android:color/white"
android:text="Answer 3"
android:textSize="20sp"/>

<Button android:id="@+id/activity_game_answer4_btn"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:textColor="@color/colorAccent"
android:layout_margin="5dp"
android:background="@android:color/white"
android:text="Answer 4"
android:textSize="20sp"/>

</LinearLayout>

Fichier Manifest
<Activity…
MAIN, LAUNCHER - Activité démarrée au lancement
Toutes lesActivity DOIVENT y être déclarée

Interfaces questions
TextView
height
0dp
weight
2
Button
height
0dp
weight
1
* Automatique
android:layout_weight (Définition du poids (l’importance))
Le système additionne les poids
ICI --> 6 (100%)
TextView 2/6
Button 1/6
Fonctionne comme
CSS Grid / Flexbox
Pour une couleur
FF0000
@color/colorPrimary --> Couleur primaire du thème
Variables CSS (ou Prepocessors)
@android:color/white --> Couleur système
android:textColor
Couleur du texte
CSS Equiv
color
android:textSize
Taille de police sp
CSS Equiv
text-size
android:textStyle
bold, italic, normal
CSS Equiv
text-style
text-weight
activity_main
<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  xmlns:tools="http://schemas.android.com/tools"  
  android:orientation="vertical"  
  android:layout_width="match_parent"  
  android:layout_height="match_parent"  
  tools:context=".controller.MainActivity">  

<!-- Label -->
<TextView
android:id="@+id/activity_main_greeting_txt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="10dp"
android:paddingStart="10dp"
android:text="Bienvenue, quel est votre prénom ?" />

<!-- Zone de saisie -->
<EditText
android:id="@+id/activity_main_first_name_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginEnd="20dp"
android:hint="Merci de saisir votre prénom" />

<!-- Bouton -->
<Button
android:id="@+id/activity_main_play_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:padding="20dp"
android:layout_marginTop="20dp"
android:text="Commencer" />

</LinearLayout>


Java
Lancement d’Activity
Demande doit être faite à l’OS
L’objet pour communiquer avec le système --> Intent (Enveloppe)

Intent(context, class)
context
l’Activity actuellement en exécution (Demandeur)
mainActivity.this
class
(Réflexion) Nom de l’Activity à démarrer avec le .class
GameActivity.class
MainActivity
Commencer
GameActivity
MainActivity (Stop)
Fin d’une Activity
Finish();
Met fin à l’Activity et s’il y a une autre Activity (soppée) elle redémarre
  • Le tag est une information supplémentaire que l’on peut assigner à une View
Lancement d’activity avec retour attendu
(startActivityForResult)
Il faut identifier l’Activity qu’on lance
requestCode

show opening bracket vscode

MainActivity
package ch.ceff.android.monquiz.controller;  

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import ch.ceff.android.monquiz.R;
import ch.ceff.android.monquiz.model.User;

/**

  • AppCompatActivity --> Activity compatible avec les anciennes versions */public class MainActivity extends AppCompatActivity {

    /// Constantes requêtes d'Activity private static final int GAME_ACTIVITY_REQUEST_CODE = 42;

/// Constantes pour les SharedPreferences private static final String PREF_KEY_FIRST_NAME = "PREF_KEY_FIRST_NAME";
private static final String PREF_KEY_SCORE = "PREF_KEY_SCORE";

/// Bind private TextView mGreetingText;
private EditText mFirstNameInput;
private Button mPlayButton;

/// User private User mUser;

/// Stockage persistant private SharedPreferences mPreferences;

/// Méthode obligatoire --> Création de l'Activity @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/// Inflate le fichier XML pour construire l'interface /// R.layout.activity_main setContentView(R.layout.activity_main);

/// L'utilisateur de l'app mUser = new User();
/// Récupération des sharedPreferences mPreferences = getPreferences(MODE_PRIVATE);

/// Votre code à partir d'ici mGreetingText = findViewById(R.id.activity_main_greeting_txt);
mFirstNameInput = findViewById(R.id.activity_main_first_name_input);
mPlayButton = findViewById(R.id.activity_main_play_btn);

/// 1) Désactivation du bouton Commencer mPlayButton.setEnabled(false);

/// Salutation du USER greetUser();

/// 2) Ecouter la zone de saisie pour détecter la composition du nom mFirstNameInput.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int start, int count, int after) {

        <span class="token punctuation">}</span>  

        <span class="token annotation punctuation">@Override</span>  

public void onTextChanged(CharSequence charSequence, int start, int before, int count) {
/// Dès que la première lettre est saisie --> On active le bouton mPlayButton.setEnabled(charSequence.toString().length() != 0);

}

        <span class="token annotation punctuation">@Override</span>  

public void afterTextChanged(Editable editable) {

        <span class="token punctuation">}</span>  
    <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  

/// 3) Mise en place du gestionnaire pour le bouton Commencer mPlayButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
/// Mémoriser le prénom du User String firstName = mFirstNameInput.getText().toString();
mUser.setFirstName(firstName);

/// Stockage du prénom en mémoire SharedPreferences.Editor editor = mPreferences.edit();
editor.putString(PREF_KEY_FIRST_NAME, mUser.getFirstName());
/// Validation du stockage editor.apply();

/// Démarrage de la seconde activité /// 1) Création d'un Intent /// 2) Démarrage de l'Activity décrite dans l'Intent Intent gameActivity = new Intent(MainActivity.this, GameActivity.class); startActivityForResult(gameActivity, GAME_ACTIVITY_REQUEST_CODE);
// startActivity(gameActivity); }
});

Log.d("MainActivity", "---> onCreate()");
}

<span class="token comment">/// Cette méthode est appelée automatiquement lorsque qu'on attend un retour d'Activity  </span>

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);

if (GAME_ACTIVITY_REQUEST_CODE == requestCode) {
if (RESULT_OK == resultCode) {
int score = data.getIntExtra(GameActivity.BUNDLE_EXTRA_SCORE, 0);

mPreferences.edit().putInt(PREF_KEY_SCORE, score).apply();

greetUser();
}
}
}

<span class="token keyword">private</span> <span class="token keyword">void</span> <span class="token function">greetUser</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>  
    String firstName <span class="token operator">=</span> mPreferences<span class="token punctuation">.</span><span class="token function">getString</span><span class="token punctuation">(</span>PREF_KEY_FIRST_NAME<span class="token punctuation">,</span> null<span class="token punctuation">)</span><span class="token punctuation">;</span>  

if (firstName != null) {
int score = mPreferences.getInt(PREF_KEY_SCORE, 0);

/// Faites mieux lol String message = "Vous voilà de retour, " + firstName
+ " !\nVotre dernier score est de " + score
+ ", voulez-vous l'améliorer ?";

mGreetingText.setText(message);
mFirstNameInput.setText(firstName);
mFirstNameInput.setSelection(firstName.length());
mPlayButton.setEnabled(true);
}
}

<span class="token annotation punctuation">@Override</span>  

protected void onStart() {
super.onStart();
Log.d("MainActivity", "---> onStart()");
}

<span class="token annotation punctuation">@Override</span>  

protected void onResume() {
super.onResume();
Log.d("MainActivity", "---> onResume()");
}

<span class="token annotation punctuation">@Override</span>  

protected void onPause() {
super.onPause();
Log.d("MainActivity", "---> onPause()");
}

<span class="token annotation punctuation">@Override</span>  

protected void onStop() {
super.onStop();
Log.d("MainActivity", "---> onStop()");
}

<span class="token annotation punctuation">@Override</span>  

protected void onDestroy() {
super.onDestroy();
Log.d("MainActivity", "---> onDestroy()");
}
}

GameActivity
package ch.ceff.android.monquiz.controller;  

import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import java.util.Arrays;

import ch.ceff.android.monquiz.R;
import ch.ceff.android.monquiz.model.Question;
import ch.ceff.android.monquiz.model.QuestionBank;

public class GameActivity extends AppCompatActivity implements View.OnClickListener {

<span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">final</span> String BUNDLE_EXTRA_SCORE <span class="token operator">=</span> <span class="token string">"BUNDLE_EXTRA_SCORE"</span><span class="token punctuation">;</span>  

private TextView mQuestionText;
private Button mAnswerButton1;
private Button mAnswerButton2;
private Button mAnswerButton3;
private Button mAnswerButton4;

/// Liste de questions private QuestionBank mQuestionBank;
/// Question en cours private Question mCurrentQuestion;
/// Nombre de questions de la sessions private int mNumberOfQuestions;
/// Le score du User private int mScore;

/// Désactivation des clics pendant la pause private boolean mEnableTouchEvents;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_game);

/// Préparation de la liste des questions mQuestionBank = this.generateQuestion();

mEnableTouchEvents = true;

/// Première question ? mCurrentQuestion = mQuestionBank.getQuestion();
/// Combien de questions à poser ? mNumberOfQuestions = 4;

mScore = 0;

mQuestionText = findViewById(R.id.activity_game_question_txt);
mAnswerButton1 = findViewById(R.id.activity_game_answer1_btn);
mAnswerButton2 = findViewById(R.id.activity_game_answer2_btn);
mAnswerButton3 = findViewById(R.id.activity_game_answer3_btn);
mAnswerButton4 = findViewById(R.id.activity_game_answer4_btn);

mAnswerButton1.setOnClickListener(this);
mAnswerButton2.setOnClickListener(this);
mAnswerButton3.setOnClickListener(this);
mAnswerButton4.setOnClickListener(this);

/// Pour éviter trop de tests dans onClick --> Tag --> Index de la réponse mAnswerButton1.setTag(0);
mAnswerButton2.setTag(1);
mAnswerButton3.setTag(2);
mAnswerButton4.setTag(3);

this.displayQuestion(mCurrentQuestion);

Log.d("GameActivity", "---> onCreate()");

}

<span class="token keyword">private</span> <span class="token keyword">void</span> <span class="token function">displayQuestion</span><span class="token punctuation">(</span>Question question<span class="token punctuation">)</span> <span class="token punctuation">{</span>  
    mQuestionText<span class="token punctuation">.</span><span class="token function">setText</span><span class="token punctuation">(</span>question<span class="token punctuation">.</span><span class="token function">getQuestion</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  

mAnswerButton1.setText(question.getChoiceList().get(0));
mAnswerButton2.setText(question.getChoiceList().get(1));
mAnswerButton3.setText(question.getChoiceList().get(2));
mAnswerButton4.setText(question.getChoiceList().get(3));
}

<span class="token keyword">private</span> QuestionBank <span class="token function">generateQuestion</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>  
    <span class="token comment">/// Version 0.1 --&gt; Question en "dur"  </span>

Question question1 = new Question("Quel layout permet d'organiser les éléments horizontalement ou verticalement ?",
Arrays.asList("FrameLayout", "RelativeLayout", "LinearLayout", "ConstraintLayout"), 2);
Question question2 = new Question("Quel attribut permet de définir le sens de remplissage d'un LinearLayout ?",
Arrays.asList("layout_weight", "orientation", "hint", "id"), 1);
Question question3 = new Question("Quel élément est un label ? ",
Arrays.asList("EditText", "TextView", "ImageView", "Button"), 1);
Question question4 = new Question("Quel élément est une zone de saisie de texte ?",
Arrays.asList("Button", "TextView", "ImageView", "EditText"), 3);
Question question5 = new Question("Quel attribut utiliser pour modifier la marge intérieur d'un élément ?",
Arrays.asList("margin", "padding", "gravity", "weight"), 1);
Question question6 = new Question("Quel attribut permet de modifier la couleur de fond d'un élément ?",
Arrays.asList("textColor", "orientation", "layout_height", "background"), 3);
Question question7 = new Question("Quelle méthode est utilisée pour afficher la GUI au lancement de l'application ?",
Arrays.asList("findViewById()", "setEnabled()", "setContentView()", "toString()"), 2);
Question question8 = new Question("Quelle unité faut-il utiliser sous Android pour définir une dimension ?",
Arrays.asList("px", "in", "dp", "cm"), 2);
Question question9 = new Question("Comment s'appelle le fichier de configuration d'une application Android ?",
Arrays.asList("activity_main", "AndroidManifest", "MainActivity", "activity_game"), 1);
Question question10 = new Question("Comment définissez-vous un gestionnaire de clic sur un bouton ?",
Arrays.asList("addOnClickListener", "addTextChangedListener", "setOnCkickListener", "setKeyListener"), 2);

return new QuestionBank(Arrays.asList(question1, question2, question3, question4, question5, question6, question7, question8, question9, question10));
}

<span class="token annotation punctuation">@Override</span>  

public void onClick(View v) {
int reponseIndex = (int) v.getTag();

if (reponseIndex == mCurrentQuestion.getAnswerIndex()) {
mScore++;
Toast.makeText(this, "Correct", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "Incorrect", Toast.LENGTH_SHORT).show();
}

    mEnableTouchEvents <span class="token operator">=</span> <span class="token boolean">false</span><span class="token punctuation">;</span>  

/// Améliorer l'UX --> Pause avant d'afficher la prochaine question new Handler().postDelayed(new Runnable() {
@Override
public void run() {
mEnableTouchEvents = true;
/// Pépare la prochaine question if (--mNumberOfQuestions == 0) {
endGame();
} else {
mCurrentQuestion = mQuestionBank.getQuestion();
displayQuestion(mCurrentQuestion);
}
}
}, 2000);

/// Pépare la prochaine question // if (--mNumberOfQuestions == 0) { // endGame(); // } else { // mCurrentQuestion = mQuestionBank.getQuestion(); // displayQuestion(mCurrentQuestion); // } }

<span class="token comment">/**  
  • Dès qu'on touche l'écran, ça c'est appelé * Méthode de dispatch des événements * @param ev

  • @return
    */
    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
    return mEnableTouchEvents && super.dispatchTouchEvent(ev);
    }

    private void endGame() {
    /// Affichage d'une boîte de dialogue AlertDialog.Builder builder = new AlertDialog.Builder(this);

/// Définir un titre, un message et les boutons builder.setTitle("Résultats")
.setMessage("Votre score est de " + mScore)
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
/// Création d'un intent pour retourner des données Intent intent = new Intent();
/// Ajout d'une donnée (EXTRA) intent.putExtra(BUNDLE_EXTRA_SCORE, mScore);
/// Que s'est-il passé ? setResult(RESULT_OK, intent);
finish(); /// Met fin à l'Activity }
})
.setCancelable(false) /// Annule la fermeture de la boîte avec un clic en dehors .create()
.show();
}

<span class="token annotation punctuation">@Override</span>  

protected void onStart() {
super.onStart();
Log.d("GameActivity", "---> onStart()");
}

<span class="token annotation punctuation">@Override</span>  

protected void onResume() {
super.onResume();
Log.d("GameActivity", "---> onResume()");
}

<span class="token annotation punctuation">@Override</span>  

protected void onPause() {
super.onPause();
Log.d("GameActivity", "---> onPause()");
}

<span class="token annotation punctuation">@Override</span>  

protected void onStop() {
super.onStop();
Log.d("GameActivity", "---> onStop()");
}

<span class="token annotation punctuation">@Override</span>  

protected void onDestroy() {
super.onDestroy();
Log.d("GameActivity", "---> onDestroy()");
}
}

User
package ch.ceff.android.monquiz.model;  

public class User {
private String mFirstName;

public String getFirstName() {
return mFirstName;
}

<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setFirstName</span><span class="token punctuation">(</span>String firstName<span class="token punctuation">)</span> <span class="token punctuation">{</span>  
    mFirstName <span class="token operator">=</span> firstName<span class="token punctuation">;</span>  

}

<span class="token annotation punctuation">@Override</span>  

public String toString() {
return "User{" +
"mFirstName='" + mFirstName + ''' +
'}';
}
}

Question
package ch.ceff.android.monquiz.model;  

import java.util.List;

public class Question {

<span class="token keyword">private</span> String mQuestion<span class="token punctuation">;</span>  

private List<String> mChoiceList;
private int mAnswerIndex;

// Quel layout permet d'organiser les éléments horizontalement ou verticalement ? // FrameLayout, RelativeLayout, LinearLayout, ConstraintLayout, 2

public Question(String question, List<String> choiceList, int answerIndex) {
this.setQuestion(question);
this.setChoiceList(choiceList);
this.setAnswerIndex(answerIndex);
}

<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setQuestion</span><span class="token punctuation">(</span>String question<span class="token punctuation">)</span> <span class="token punctuation">{</span>  
    <span class="token keyword">this</span><span class="token punctuation">.</span>mQuestion <span class="token operator">=</span> question<span class="token punctuation">;</span>  

}

<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setChoiceList</span><span class="token punctuation">(</span>List<span class="token operator">&lt;</span>String<span class="token operator">&gt;</span> choiceList<span class="token punctuation">)</span> <span class="token punctuation">{</span>  
    <span class="token keyword">if</span> <span class="token punctuation">(</span>choiceList <span class="token operator">==</span> null<span class="token punctuation">)</span> <span class="token punctuation">{</span>  
        <span class="token keyword">throw</span> <span class="token keyword">new</span> <span class="token class-name">IllegalArgumentException</span><span class="token punctuation">(</span><span class="token string">"La liste ne peut pas être vide !"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  

}

    <span class="token keyword">this</span><span class="token punctuation">.</span>mChoiceList <span class="token operator">=</span> choiceList<span class="token punctuation">;</span>  

}

<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setAnswerIndex</span><span class="token punctuation">(</span><span class="token keyword">int</span> answerIndex<span class="token punctuation">)</span> <span class="token punctuation">{</span>  
    <span class="token keyword">if</span> <span class="token punctuation">(</span>answerIndex <span class="token operator">&lt;</span> <span class="token number">0</span> <span class="token operator">||</span> answerIndex <span class="token operator">&gt;=</span> mChoiceList<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>  
        <span class="token keyword">throw</span> <span class="token keyword">new</span> <span class="token class-name">IllegalArgumentException</span><span class="token punctuation">(</span><span class="token string">"Mauvaise valeur d'index"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  

}

    <span class="token keyword">this</span><span class="token punctuation">.</span>mAnswerIndex <span class="token operator">=</span> answerIndex<span class="token punctuation">;</span>  

}

<span class="token keyword">public</span> String <span class="token function">getQuestion</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>  
    <span class="token keyword">return</span> mQuestion<span class="token punctuation">;</span>  

}

<span class="token keyword">public</span> List<span class="token operator">&lt;</span>String<span class="token operator">&gt;</span> <span class="token function">getChoiceList</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>  
    <span class="token keyword">return</span> mChoiceList<span class="token punctuation">;</span>  

}

<span class="token keyword">public</span> <span class="token keyword">int</span> <span class="token function">getAnswerIndex</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>  
    <span class="token keyword">return</span> mAnswerIndex<span class="token punctuation">;</span>  

}

<span class="token annotation punctuation">@Override</span>  

public String toString() {
return "Question{" +
"mQuestion='" + mQuestion + ''' +
", mChoiceList=" + mChoiceList +
", mAnswerIndex=" + mAnswerIndex +
'}';
}
}

QuestionBank
package ch.ceff.android.monquiz.model;  

import java.util.Collections;
import java.util.List;

public class QuestionBank {

<span class="token keyword">private</span> List<span class="token operator">&lt;</span>Question<span class="token operator">&gt;</span> mQuestionList<span class="token punctuation">;</span>  

private int mNextQuestionIndex;

public QuestionBank(List<Question> questionList) {
mQuestionList = questionList;
/// Mélanger la liste Collections.shuffle(mQuestionList);
mNextQuestionIndex = 0;
}

<span class="token keyword">public</span> Question <span class="token function">getQuestion</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>  
    <span class="token comment">/// Retoure à 0 si débordement de la liste  </span>

if (mNextQuestionIndex == mQuestionList.size()) {
mNextQuestionIndex = 0;
}

    <span class="token keyword">return</span> mQuestionList<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span>mNextQuestionIndex<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  

}

}

SharedPreferences
Création
mPreferences = getPreferences(MODE_PRIVATE);
Ajout de donnée
  1. Récupération de l’éditeur
  1. Création de la donnée à stocker
  1. Stockage
SharedPreferences.Editor editor = mPreferences.edit(); /// 1)
editor.putString(“NOM”, “VALEUR”); /// 2)
editor.apply(); /// 3)
Lecture
mPreferences.getString(“NOM”, null);

Professions Android

Front-End
Developpeur UX (Science)
Developpeur UI (view)
Developpeur app (controller, model)
Back-End
Developpeur BD, Réseau

Khodok's Logo

Written by Khodok
Khoding

Written with StackEdit.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment