Elg*_*ndy 96 android android-adapter recycler-adapter android-recyclerview
我正在尝试刷新特定项目RecyclerView
.
故事:每当用户点击项目时,它都会显示AlertDialog
.用户可以通过单击确定按钮键入一些文本.我想在这个项目中显示这个文本并显示不可见ImageView
- 在XML和适配器中声明ViewHolder
-
我在AlertDialog
Positive Button中使用此函数来更新项目:
private void updateListItem(int position) {
View view = layoutManager.findViewByPosition(position);
ImageView medicineSelected = (ImageView) view.findViewById(R.id.medicine_selected);
medicineSelected.setVisibility(View.VISIBLE);
TextView orderQuantity = (TextView) view.findViewById(R.id.order_quantity);
orderQuantity.setVisibility(View.VISIBLE);
orderQuantity.setText(quantity + " packet added!");
medicinesArrayAdapter.notifyItemChanged(position);
}
Run Code Online (Sandbox Code Playgroud)
但是这段代码不仅改变了传递位置的itemView,还改变了其他一些itemView(s)!
如何通过单击更改特定的itemView?
Eds*_*tti 88
您可以使用notifyItemChanged(int position)
RecyclerView.Adapter类中的方法.从文档:
通知任何注册观察员该位置的项目已更改.相当于调用notifyItemChanged(position,null);.
这是一个项目更改事件,而不是结构更改事件.它表示位置数据的任何反映都已过时,应予以更新.位置处的项目保留相同的标识.
由于你已经拥有这个职位,它应该适合你.
Sur*_*gch 31
notifyItemChanged(updateIndex)
更改"羊"项目,使其显示"我喜欢羊".
String newValue = "I like sheep.";
int updateIndex = 3;
data.set(updateIndex, newValue);
adapter.notifyItemChanged(updateIndex);
Run Code Online (Sandbox Code Playgroud)
我举出更多的例子全面的回答是这里.
我想我对如何处理这个有一个想法.更新与在确切位置删除和替换相同.所以我首先使用下面的代码从该位置删除该项目:
public void removeItem(int position){
mData.remove(position);
notifyItemRemoved(position);
notifyItemRangeChanged(position, mData.size());
}
Run Code Online (Sandbox Code Playgroud)
然后我会在该特定位置添加项目,如下所示:
public void addItem(int position, Landscape landscape){
mData.add(position, landscape);
notifyItemInserted(position);
notifyItemRangeChanged(position, mData.size());
}
Run Code Online (Sandbox Code Playgroud)
我现在正试图实现这一点.当我通过时,我会给你一个反馈!
小智 7
我必须通过捕获需要修改的项目的位置然后在适配器调用中解决此问题
public void refreshBlockOverlay(int position) {
notifyItemChanged(position);
}
Run Code Online (Sandbox Code Playgroud)
,这将在此特定位置为此特定项调用onBindViewHolder(ViewHolder holder,int position).
小智 6
将更改的文本添加到模型数据列表
mdata.get(position).setSuborderStatusId("5");
mdata.get(position).setSuborderStatus("cancelled");
notifyItemChanged(position);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
147954 次 |
最近记录: |