在回收站视图中重复图像
问题描述:
我有一组图像以随机方式显示在回收站视图中。问题是图像重复,而不是所有的图像都被使用。我需要的是:所有使用的图像并只显示一次(不重复)。预先感谢您的帮助。在回收站视图中重复图像
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();
}
答
改变你的文章类这样的:
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
答
您已经在洗牌数组,并且您再次从该混洗数组中挑选随机图像。随机挑选会让你再次获得相同的图像。因此,只需按照洗牌顺序从阵列中选择图像即可。无需挑选随机图像。
编辑:
更改您的数组列表和尝试是这样的:
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
你能提供你的代码适配器吗? – babadaba
在问题 – Pawel