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