[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
A voir également:
- [List] Remplir une ArrayList
- Organigramme a remplir word - Guide
- List disk - Guide
- Créer une liste déroulante excel - Guide
- Directory list & print - Télécharger - Divers Utilitaires
- Comment remplir un document pdf - Guide
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
Pour générer un nombre aléatoire, il faut utiliser
Note : généralement, les noms de variable commencent par une minuscule
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 utiliser
Random().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
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
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
As-tu compris le code que je t'ai posté ? Je pense répondre à ton besoin. Je le remets, avec des commentaires
Dis-moi si quelque chose ne convient pas
// 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 :
Pour l'activité FilmC1 j'ai tapé :
Encore merci de votre attention c'est gentil
.
//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
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 !