[英]RecyclerView Item position does not get update
在下面的代码中,我可以通过单击imgBtn删除图像,但是我的图像不会滚动删除的图像位置,它只会保持其当前位置,不会更新。
主要活动课
ItemData itemsData[] = {new ItemData("Help", R.drawable.image),
new ItemData("Delete", R.drawable.orange),
new ItemData("Cloud", R.drawable.image),
new ItemData("Favorite", R.drawable.orange),
new ItemData("Like", R.drawable.image),
new ItemData("Rating", R.drawable.orange)};
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
LinearLayoutManager llm = new LinearLayoutManager(this);
llm.setOrientation(LinearLayoutManager.HORIZONTAL);
recyclerView.setLayoutManager(llm);
CustomAdapter mAdapter = new CustomAdapter(itemsData);
recyclerView.setAdapter(mAdapter);
ItemData类
public class ItemData {
private String title;
private int imageUrl;
public ItemData(String title,int imageUrl){
this.title = title;
this.imageUrl = imageUrl;
}
String getTitle(){return title;}
void setTitle(String t){title = t;}
int getImageUrl(){return imageUrl;}
void setImageUrl(int t){imageUrl = t;}
}
自定义适配器类
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder>
{
private ItemData[] itemsData;
private Context context;
private CustomAdapter thisAdapter = this;
public CustomAdapter( ItemData[] itemsData) {
this.itemsData = itemsData;
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, int pos) {
final int position = pos;
viewHolder.imgViewIcon.setImageResource(itemsData[position].getImageUrl());
viewHolder.imgBtn.setImageResource(R.drawable.ic_close_black_24dp);
viewHolder.imgBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((FrameLayout) v.getParent()).removeAllViews();
}
});
}
}
使用RecyclerView时,应避免手动修改视图。 使用适配器notify *方法将所有更新推送到列表视图。 在您的特定情况下,我建议您使用List<ItemData>
而不是数组,然后在您的onClickListener
代码中执行以下操作:
@Override
public void onClick(View v) {
itemsData.remove(position);
notifyItemRemoved(position);
}
我无法确切地说出数据是如何用于填充RecyclerView的,我假设它是itemsData,但是您需要从其中删除有问题的项目,然后向该适配器发出notifyItemRemoved(position)
调用。
如果要从recylerview中删除项目。 不要这样做。
因为您使用ItemData []数组
List<ItemData> numlist = new ArrayList<ItemData>();
for(int i= 0;i<itemsData.length;i++)
{
if(i == position)
{
// No operation here
}
else
{
numlist.add(arr_fav[i]);
}
}
itemsData = numlist.toArray(new String[numlist .size()]);
notifyItemRemoved(position);
notifyItemRangeChanged(0, mDataset.size());
如果将其转换为List<ItemData>
,请访问asadmshas的答案
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.