2016-08-04 22 views
2

Ich habe eine Reihe von Bildern in Recycler View in zufälliger Weise anzuzeigen. Das Problem besteht darin, dass Bilder wiederholt werden und nicht alle Bilder verwendet werden. Was ich brauche, ist: alle verwendeten Bilder und jedes davon nur einmal anzuzeigen (keine Wiederholung). Vielen Dank im Voraus für Hilfe.Bilder wiederholen in Recycler-Ansicht

public class Article { 
private int mTitle; 

private static int[] sTitles = { 
     R.drawable.image1a, 
     R.drawable.image2a, 
     .... 
     R.drawable.image30a 
}; 
public Article() { 

    Random random = new Random(); 

// Collections.shuffle (Arrays.asList (sTitles)); // Versuchte Erfolg

mTitle = sTitles[random.nextInt(sTitles.length)]; 
} 
public int getTitle() { 
    return mTitle; 

} 

bearbeiten diesem aber kein zu verwenden: Mein Adaptercode

MyAdapter öffentlichen Klasse erweitert RecyclerView.Adapter {

private ArrayList<Article> mArticles = new ArrayList<>(); 

öffentliche RecyclerView mRecyclerView;

private class MyViewHolder extends RecyclerView.ViewHolder { 

    public ImageView mTitle; 


    public MyViewHolder(View pItem) { 
     super(pItem); 

     mTitle = (ImageView) pItem.findViewById(R.id.imageView); 
    } 
} 

public MyAdapter(ArrayList<Article> pArticles, RecyclerView pRecyclerView) { 
    mArticles = pArticles; 
    mRecyclerView = pRecyclerView; 


} 

@Override 
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, final int i) { 

    View view = LayoutInflater.from(viewGroup.getContext()) 
      .inflate(R.layout.article_layout, viewGroup, false); 

     return new MyViewHolder(view); 
} 

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, final int i) { 

    Article article = mArticles.get(i); 

    ((MyViewHolder) viewHolder).mTitle.setImageResource(article.getTitle()); 

} 

@Override 
public int getItemCount() { 
    return mArticles.size(); 

} 
+0

Können Sie Ihr den Code für den Adapter zur Verfügung stellen? – babadaba

+0

hinzugefügt Adapter-Code in der Frage – Pawel

Antwort

1

Ihre Artikel Klasse, dies ändern:

public class Article { 
    private int mTitle; 

    private static int[] sTitles = { 
      R.drawable.image1a, 
      R.drawable.image2a, 
      .... 
      R.drawable.image30a 
    }; 

    public Article(int title) { 
     this.mTitle = title; 
    } 

    public int getTitle() { 
     return mTitle; 
    } 

    public static ArrayList<Integer> getRandomArticles() { 
     ArrayList<Integer> titles = new ArrayList<>(); 
     ArrayList<Integer> tempTitles = new ArrayList<Integer>(Arrays.asList(sTitles)); 
     Collections.shuffle(tempTitles); 
     for(int title : tempTitles) { 
      titles.add(title); 
     } 
     return titles; 
    } 
} 

dann, wenn Sie Ihren Adapter erstellen Übergeben Sie Article.getRandomArticles() als Artikelliste wie folgt:

new MyAdapter(Article.getRandomArticles(), yourRecyclerView); 

EDIT: Passwort Rückgabetyp getRandomArticles

+0

Danke wird es versuchen – Pawel

+0

Haben Sie es versucht? Funktioniert es? – babadaba

+0

Wird später damit arbeiten - werde Sie wissen lassen – Pawel

0

Sie mischen bereits das Array und wieder wählen Sie ein zufälliges Bild aus diesem gemischten Array. Diese zufällige Auswahl führt dazu, dass Sie dasselbe Bild erneut erhalten. Wählen Sie einfach die Bilder aus dem Array in ihrer gemischten Reihenfolge aus. keine Notwendigkeit, zufälliges Bild auszuwählen.

Edit:

Array ändern, um so etwas wie diese Liste und Versuchen:

public static ArrayList<Integer> sTitles = new ArrayList<Integer>(); 
sTitles.add(R.drawable.image1a); 
. 
. 
. 
. 
sTitles.add(R.drawable.image30a); 
Collections.shuffle(sTitles); 
+0

Wenn ich Code ohne Collections.shuffle habe passiert es wie ich beschrieben. Aber wenn ich zufällig lösche, funktioniert die Collection.shuffle selbst nicht und jedes Bild wird angezeigt. – Pawel