在回收站视图中重复图像

问题描述:

我有一组图像以随机方式显示在回收站视图中。问题是图像重复,而不是所有的图像都被使用。我需要的是:所有使用的图像并只显示一次(不重复)。预先感谢您的帮助。在回收站视图中重复图像

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

改变你的文章类这样的:

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

您已经在洗牌数组,并且您再次从该混洗数组中挑选随机图像。随机挑选会让你再次获得相同的图像。因此,只需按照洗牌顺序从阵列中选择图像即可。无需挑选随机图像。

编辑:

更改您的数组列表和尝试是这样的:

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