[英]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.