RecyclerView项目位置未获得更新

时间:2016-02-13 07:05:52

标签: android android-recyclerview

在下面的代码中,我可以通过单击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();
        }
    });
 }

}

2 个答案:

答案 0 :(得分:1)

使用RecyclerView时,应避免手动修改视图。使用适配器notify *方法将任何更新推送到列表视图。在您的具体情况下,我建议使用List<ItemData>代替数组,然后在您的onClickListener代码中执行此操作:

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

我无法准确地告诉我们如何使用数据来填充您的RecyclerView,我假设它是itemsData,但您要从中删除相关项目,然后发出{{ 1}}调用该适配器。

答案 1 :(得分:1)

如果要从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's Answer