RecyclerView Item position does not get update

大兔子大兔子 提交于 2019-12-25 05:09:40

问题


In the following code, I could able to delete the image via clicking imgBtn, but my images does not scroll the deleted image position, it just stays its current position, it does not update.

Main Activity Class

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 Class

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;}
}

Custom Adapter Class

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();
        }
    });
 }

}

回答1:


If you want to remove Item from the recylerview. dont do it like this.

Because you using ItemData[] array

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());

If you convert it to List<ItemData> Go with asadmshas's Answer




回答2:


You should avoid manually modifying the views when using a RecyclerView. Use the adapters notify* methods to push any updates to the list view. In your specific case I'd suggest using a List<ItemData> instead of an array and then in your onClickListener code I'd do this:

@Override
public void onClick(View v) {
    itemsData.remove(position);
    notifyItemRemoved(position);
}

I can't exactly tell how the data is used to populate your RecyclerView, I'm assuming it is itemsData, but you'd remove the item in question from it and then issue a notifyItemRemoved(position) call to that adapter.



来源:https://stackoverflow.com/questions/35377100/recyclerview-item-position-does-not-get-update

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!