[List] Remplir une ArrayList
SuperGoldfish
Messages postés
5
Statut
Membre
-
SuperGoldfish Messages postés 5 Statut Membre -
SuperGoldfish Messages postés 5 Statut Membre -
Bonjour,
Je vous contact car je ne sais pas comment m'y prendre pour une liste d'éléments comprenant une image, un string , et un autre string. (J'ai fais comme cela mais ca ne fonctionne pas, mais ca n'affiche pas d'erreur pour autant..). De plus, je dois afficher un élément aléatoire de la liste, mais je trouve pas vraiment le moyen de parcourir la liste avec un random via l'index de la liste... Peut être pourrez m'aider.
Je vous remercie d'avance !
Je vous contact car je ne sais pas comment m'y prendre pour une liste d'éléments comprenant une image, un string , et un autre string. (J'ai fais comme cela mais ca ne fonctionne pas, mais ca n'affiche pas d'erreur pour autant..). De plus, je dois afficher un élément aléatoire de la liste, mais je trouve pas vraiment le moyen de parcourir la liste avec un random via l'index de la liste... Peut être pourrez m'aider.
public class Page1 extends AppCompatActivity {
private ImageView Affiche ;
private TextView Titre ;
private TextView Description ;
private Random r ;
public List<FilmsC1> films;
private Button Bouton ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_page1);
this.r = new Random();
this.films = new ArrayList<FilmsC1>() ;
FilmsC1 film1 = new FilmsC1(R.drawable.image_1 , "Titre 1" , "Description 1") ;
FilmsC1 film2 = new FilmsC1(R.drawable.image_2 , "Titre 2" , "Description 2") ;
FilmsC1 film3 = new FilmsC1(R.drawable.image_3 , "Titre 3" , "Description 3") ;
FilmsC1 film4 = new FilmsC1(R.drawable.image_4 , "Titre 4" , "Description 4") ;
FilmsC1 film5 = new FilmsC1(R.drawable.image_5 , "Titre 5" , "Description 5") ;
films.add(film1);
films.add(film2);
films.add(film3);
films.add(film4);
films.add(film5);
this.Affiche = (ImageView) findViewById(R.id.Affiche1) ;
Affiche.setImageResource(film1.getAffiches());
this.Titre = (TextView) findViewById(R.id.Titre1) ;
Titre.setText(films.indexOf(film1.getTitres()));
this.Description = (TextView) findViewById(R.id.Description1);
Description.setText(films.indexOf(film1.getDescriptions()));
this.Bouton = findViewById(R.id.buttonDejaVu);
Bouton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent Retry = new Intent(getApplicationContext(), Page1.class);
startActivity(Retry);
}
});
}
}
Je vous remercie d'avance !
Configuration: Macintosh / Chrome 81.0.4044.129
3 réponses
-
Hello,
Difficile de t'aider avec un simple "ça ne fonctionne pas"... Néanmoins, il y a plusieurs choses qui ne vont pas forcément
film1.getAffiches()
Je m'attends à récupérer plusieurs affiches. C'est le cas ? Quel est le type de l'objet retour ? Un Drawable ? Un DrawableID ?
films.indexOf(film1.getTitres())
Même remarque, je m'attends à une liste. De plus, tu essaies de récupérer l'occurrence d'un objet à partir d'un objet d'un autre type. C'est comme si tu comparais des choux et des carottes.
Pour générer un nombre aléatoire, il faut utiliserRandom().nextInt(int bound)
, sachant que cette méthode va te générer un entier entre 0 et bound-1. Dans ton cas, tu peux utiliser ceci :
Random random = new Random(); int aleatoire = random.nextInt(films.size()); FilmC1 filmAleatoire = films.get(aleatoire); affiche.setImageResource(filmAleatoire.getAffiche()); titre.setText(filmAleatoire.getTitre()); description.setText(filmAleatoire.getDescription());
Note : généralement, les noms de variable commencent par une minuscule-
Merci de la réponse !
film1.getAffiche recevra une seule image qui est un Drawable, film2 aura une autre image, et ainsi de suite. Je voudrais donc choisir d'afficher un film(r) ou r serait le random(). Pour cela j'avais déja utilisé Integer[] et Random().nextInt, mais cette méthode ne fonctionne pas avec les String[], or je pensais à utiliser un même random r pour parcourir 3 tableaux (un pour les images, un pour les titres et un pour les descriptions) comme s'en suit :
public class Page1 extends AppCompatActivity { private ImageView Affiche ; private TextView Titre ; private Random r ; private Integer[] affiches = { R.drawable.image_1, R.drawable.image_2, R.drawable.image_3, R.drawable.image_4, R.drawable.image_5, }; private String titres[] = { "Titre 1", "Titre 2", "Titre 3", "Titre 4", "Titre 5", }; private String descriptions[] = { "Description 1", "Description 2", "Description 3", "Description 4", "Description 5", @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_page1); this.r = new Random();</span> this.Affiche =(ImageView)findViewById(R.id.Affiche1) ; Affiche.setImageResource(affiches[r.nextInt(affiches.length)]); this.Titre = (TextView) findViewById(R.id.Titre1) ; Titre.setText(titres[r.nextInt( /* ??? */ )]); this.Description = (TextView) findViewById(R.id.Description1); Description.setText(descriptions[r.nextInt( /* ??? */ )]); } }
Je vous remercie d'avance !
-
-
Pour les données, il vaut mieux garder un objet Film qui stocke affiche, titre et description plutôt que 3 listes. Un jour, tu vas vouloir, par exemple, supprimer une affiche mais du coup, tes tableaux n'auront plus la même taille et tu vas crasher.
Si je comprends bien, tu veux afficher un film de manière aléatoire et non créer un pseudo film avec les infos d'autres films prises de manière aléatoire, non ? La méthode que je t'ai posté te permet de générer un seul chiffre aléatoire, entre 0 et le nombre de films dans ta liste. Là, tu vas piocher aléatoirement dans tes listes pour créer un film
-
Ouais c'est exactement ca ! Mais le problème c'est que je ne vois pas par quel methode il faut passer pour faire parcourir un random dans la liste films ..
- As-tu compris le code que je t'ai posté ? Je pense répondre à ton besoin. Je le remets, avec des commentaires
// stockage des films dans une liste films = new ArrayList<FilmsC1>() ; // génération d'un nombre aléatoire compris entre 0 et le nombre de films de ta liste Random random = new Random(); int aleatoire = random.nextInt(films.size()+1); // récupération du film correspondant FilmC1 filmAleatoire = films.get(aleatoire); // affichage des données affiche.setImageResource(filmAleatoire.getAffiche()); titre.setText(filmAleatoire.getTitre()); description.setText(filmAleatoire.getDescription());
Dis-moi si quelque chose ne convient pas
-
-
HA ! oui ok je comprends beaucoup mieux la fonction get ! Cependant j'ai toujours un problème, lorsque je lance l'appli et que j'arrive sur l'activité - Page1 - (celle ou est écrit ce code), ca me ramène à l'activité précédente, comme si le code comprenait toujours des erreurs. Je pense que cela est dût à ma manière de remplir ma liste de film, ou peut être à mon activité - FilmC1 - ... : Pour remplir ma liste j'ai tapé dan l'activité Page1 :
.
//Nouvelle Liste
this.films = new ArrayList<>();
FilmsC1 film1 = new FilmsC1(R.drawable.image_1 , "Titre 1" , "Description 1");
FilmsC1 film2 = new FilmsC1(R.drawable.image_2 , "Titre 2" , "Description 2");
FilmsC1 film3 = new FilmsC1(R.drawable.image_3 , "Titre 3" , "Description 3");
//Génération d'un entier aléatoire entre 0 et TaileListe
Random random = new Random();
int r = random.nextInt(films.size()+1) ; // ... Et le reste du code
Pour l'activité FilmC1 j'ai tapé :
class FilmsC1 {
private int affiches;
private String titres;
private String descriptions;
public int getAffiches() {
return affiches;
}
public String getTitres() {
return titres;
}
public String getDescriptions() {
return descriptions;
}
public FilmsC1(int paffiche, String ptitre, String pdescription) {
this.affiches = paffiche;
this.titres = ptitre;
this.descriptions = pdescription;
}
}
Encore merci de votre attention c'est gentil