android - android array adapter.notifyDataSetChanged() 正在改变项目的位置
问题描述
我有一个带有多个子元素的自定义布局的 listView 数组适配器。在getView()
我将这些子视图绑定到 viewHolder 类,如下所示:
@NonNull
@Override
public View getView(int position, View convertView, @NonNull ViewGroup parent) {
// get item for selected view
Item item = getItem(position);
// if cell is exists - reuse it, if not - create the new one from resource
FoldingCell cell = (FoldingCell) convertView;
ViewHolder viewHolder;
if (cell == null) {
viewHolder = new ViewHolder();
LayoutInflater vi = LayoutInflater.from(getContext());
cell = (FoldingCell) vi.inflate(R.layout.cell, parent, false);
viewHolder.delete = cell.findViewById(R.id.DeleteICN);
viewHolder.delete.setTag(position);
viewHolder.rename = cell.findViewById(R.id.renameBtn);
viewHolder.rename.setTag(position);
cell.setTag(viewHolder);
...
...
}
public void setDefaultRequestBtnClickListener(View.OnClickListener defaultRequestBtnClickListener) {
this.defaultRequestBtnClickListener = defaultRequestBtnClickListener;
}
private static class ViewHolder{
ConstraintLayout delete;
ConstraintLayout rename;
}
我正在delete
和rename
视图上设置标签(位置),因此如果我删除或重命名特定元素(onclick),我可以使用标签轻松找到它。
问题是,当我使用以下代码单击重命名或删除按钮时:
adapter.setDefaultRequestBtnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
Toast.makeText(rootView.getContext(), " "+v.getTag(), Toast.LENGTH_SHORT).show();
if(v.getId() == R.id.renameBtn){
System.out.println(v.getTag());
Item item = adapter.getItem(v.getTag());
//this changes a textView in the same listview element
item.setTitle("newTitle");
}
adapter.notifyDataSetChanged();
}
});
多次单击同一元素时,显示的 toast 正在更改值。但是,如果我注释掉adapter.notifyDataSetChanged()
toast 为同一元素保留相同的值。这是为什么?
如果我应该发布任何其他代码,请告诉我。
解决方案
推荐阅读
- c - 发送和接收
- python - 在 Python 中刷新 Tkinter 窗口
- c++ - 比较“A”、“C”、“G”、“T”字符的最快方法
- jackson - Hazelcast - 按杰克逊 ObjectNode 对象的字段查询
- react-native - 复制模板时如何解决 React 本机错误
- javascript - 查看具有相同类的多个 div 调用所有 div 的函数?
- javascript - 我试图让我的物化轮播成为视频而不是图像
- forms - 自定义模块中的 Prestashop 用户组“组”表单助手
- android - Firebase 不插入任何数据
- javascript - 在 Rails 应用程序中使用 Vue.js 显示谷歌地图