调用通知数据集后适配器未更新

时间:2019-06-27 12:20:21

标签: java android android-recyclerview android-adapter

我在片段中有一个列表,我正在RecyclerView中进行设置。有一个按钮,单击它时,我将回调传递给Fragment。现在片段正在打开另一个视图,该视图是一个以Dialog表示的活动,它从用户那里获取不同的输入,最后单击“提交”按钮时,它会返回某种数据/模型。

现在,我在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很简单,但不是   目前正在工作。 ...

1 个答案:

答案 0 :(得分:0)

删除使用:

 mTempList.remove(position);
 mTempList.add(position,treeDataModel);
 treeAdapter.notifyDataSetChanged();

添加用途:

 mTempList.set(position,treeDataModel);
 treeAdapter.notifyItemChanged(position);