我正在尝试显示特定文件夹中的图像(3张图像),并使用以下代码将其存储在Recyclerview
中,但是Recyclerview
的第一项重复两次,出现在第一和最后项目和最后一个项目未显示,如下图所示:
MyAdapter
public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> {
Context c;
ImageView img;
ArrayList<Spacecraft> spacecrafts;
public MyAdapter(Context c, ArrayList<Spacecraft> spacecrafts) {
this.c = c;
this.spacecrafts = spacecrafts;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(c).inflate(R.layout.picture_item, parent, false);
img = (ImageView) v.findViewById(R.id.cat_imageView);
return new MyViewHolder(v);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemViewType(int position) {
return position;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
Spacecraft s = spacecrafts.get(position);
Glide.with(c).load(s.getUri()).into(img);
}
@Override
public int getItemCount() {
return spacecrafts.size();
}
}
MainActivity
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity);
/**/
recyclerView = (RecyclerView) findViewById(R.id.rc);
layoutManager = new GridLayoutManager(WallpaperAutoChanger.this, 2);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setHasFixedSize(true);
recyclerView.setAdapter(new MyAdapter(this, getData()));
/**/
}
}
private ArrayList<Spacecraft> getData() {
ArrayList<Spacecraft> spacecrafts = new ArrayList<>();
File downloadsFolder = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES + "/wallpapers");
Spacecraft s;
if (downloadsFolder.exists()) {
File[] files = downloadsFolder.listFiles();
for (File file : files) {
s = new Spacecraft();
s.setName(file.getName());
s.setUri(Uri.fromFile(file));
spacecrafts.add(s);
}
}
return spacecrafts;
}
有人可以帮助我解决此问题。
答案 0 :(得分:0)
将img
更改为局部变量。它不应该是全球性的。您可以像这样将其初始化移至onBindViewHolder()
中:
ImageView img = (ImageView) holder.itemView.findViewById(R.id.cat_imageView);
然后在您使用它的地方调用它。
我不确定,因为我没有看过源代码,但是我不认为可以保证在索引onBindViewHolder
被调用之前onCreateViewHolder
被索引0调用1(它们不是顺序的),这意味着您的img
变量使用了错误的赋值。