2016-08-04 76 views
2

我有一組圖像以隨機方式顯示在回收站視圖中。問題是圖像重複,而不是所有的圖像都被使用。我需要的是:所有使用的圖像並只顯示一次(不重複)。預先感謝您的幫助。在回收站視圖中重複圖像

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)); //試圖用這一點,但沒有成功

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

} 

編輯:我的適配器代碼

公共類MyAdapter擴展RecyclerView.Adapter {

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

public 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

你能提供你的代碼適配器嗎? – babadaba

+0

在問題 – Pawel

回答

1

改變你的文章類這樣的:

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; 
    } 
} 

然後,當你創建你的適配器通過Article.getRandomArticles()作爲文章列表,如下所示:

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

編輯:忘了返回類型的getRandomArticles

+0

謝謝你會試試 – Pawel

+0

你試過了嗎?它工作嗎? – babadaba

+0

將在今天晚些時候使用 - 會讓你知道 – Pawel

0

您已經在洗牌數組,並且您再次從該混洗數組中挑選隨機圖像。隨機挑選會讓你再次獲得相同的圖像。因此,只需按照洗牌順序從陣列中選擇圖像即可。無需挑選隨機圖像。

編輯:

更改您的數組列表和嘗試是這樣的:

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

中添加了適配器代碼當我有沒有Collections.shuffle的代碼時,它就像我所描述的那樣發生。但是,當我隨機刪除Collection.shuffle本身並不工作,並顯示任何圖片。 – Pawel