java - 调用通知数据集后适配器未更新
问题描述
我在片段中有一个列表,我在 RecyclerView 中设置它。有一个按钮,单击它时我将回调传递给片段。现在片段正在打开另一个视图,这是一个显示为对话框的活动,它从用户那里获取不同的输入,最后在提交按钮单击时,它会返回某种数据/模型。
现在我在 Fragment 的 onActivityResult 方法中获取该数据,并且在将用户修改的数据更改并替换到列表中之后,我在适配器上调用 notifyDataSetChanged。但数据没有改变。这是我正在做的。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == DialogChangeStore.RC_DIALOG_CHANGE_STORE) {
if (data != null) {
if (data.hasExtra(DialogChangeStore.KEY_USER_SELECTED_STORE)) {
PreferredStoreServiceModel model = data.getParcelableExtra(DialogChangeStore.KEY_USER_SELECTED_STORE);
int position = data.getIntExtra(DialogChangeStore.KEY_CLICKED_GROUP_POSITION, -1);
if (position == -1) {
return;
}
if (model != null) {
ArrayList<TreeDataModel> mTempList = new ArrayList<>();
mTempList.addAll(treeAdapter.getUserList());
TreeDataModel modelToBeReplaced = mTempList.get(position);
TreeDataModel treeDataModel = new TreeDataModel();
treeDataModel.setId(model.getId());
treeDataModel.setName(model.getFriendlyName());
treeDataModel.setmPreferredStoreServiceModel(model);
treeDataModel.setSelected(modelToBeReplaced.isSelected());
treeDataModel.setExpanded(modelToBeReplaced.isExpanded());
treeDataModel.setHeader(true);
treeDataModel.setIndexNumber(modelToBeReplaced.getIndexNumber());
mTempList.remove(position);
mTempList.add(position,treeDataModel);
treeAdapter.getUserList().clear();
treeAdapter.setUserList(mTempList);
treeAdapter.notifyDataSetChanged();
selectedChangedStore = null;
}
}
}
}
}
这在我进行调试时不起作用,我可以看到数据已更改。此方法treeAdapter.getUserList()返回列表,并显示更新的列表。但它实际上并不适合我。
你能告诉我可能是什么问题吗?我正在使用警报 dailog 从其他方面/区域/进行相同类型的操作,但我可以看到列表正在更新。代码与我上面分享的相对相同。
请告诉我我错了什么以及可能是什么问题。我知道更新列表和 notifyDatasetChanged 很简单,但目前无法正常工作。...
解决方案
删除使用:
mTempList.remove(position);
mTempList.add(position,treeDataModel);
treeAdapter.notifyDataSetChanged();
添加使用:
mTempList.set(position,treeDataModel);
treeAdapter.notifyItemChanged(position);
推荐阅读
- unit-testing - 如何断言在单元测试中使用了哪个协程调度程序?
- python - 如何添加到默认 Django 用户模型的 ManyToManyField 扩展?
- c# - 试图阻止随机生成的图片框不相互交叉
- javascript - 测试返回另一个类的类方法
- bash - 在cygwin提示符下换行?
- pandas - Getting keyerror:0 in pandas
- node.js - firebase 函数中未定义的记录器
- firebase - Cloud Firestore Blaze 计划是否存在未知的配额限制?Flutter Firestore 应用程序每天都从悬崖上掉下来
- ibm-doors - 如何识别对象字符串中的文本
- codeigniter - 节省用户在 CodeIgniter 中的登录时间