簡體   English   中英

RecyclerView物品位置未更新

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM