微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在片段内部和片段之间使用ArrayList更新RecyclerView

如何解决在片段内部和片段之间使用ArrayList更新RecyclerView

我有MainActivity.class,两个Fragments都有RecyclerView。从片段A ,我使用fragmentTransaction.add(R.id.fragment_container1,fragment_b);->(进入片段B ,简而言之,将sqldatabase中的数据放入ArrayList中)
现在在片段B 中,当我在single RecyclerView Card中更改某些数据时,我正在使用RecyclerView来更新onActivityResult,如下所示:


 @Override
    public void onActivityResult(int requestCode,int resultCode,@Nullable Intent data) {
        super.onActivityResult(requestCode,resultCode,data);
        if(requestCode == SECOND2_LAUNCH){
            if(resultCode == Activity.RESULT_OK){               
                  int modify_position = data.getIntExtra("key4",DEFAULT:0);
                  MyItem item = data.getParcelableExtra("key3");
                  data_list7.set(modify_position,item);
                  mAdapter_details.notifyItemChanged(modify_position);
                }
            }
            if (resultCode == Activity.RESULT_CANCELED){
                Toast.makeText(getContext(),"error",Toast.LENGTH_SHORT).show();
            }
        }
}

例如,我想更改位置 1 3 5 的项目名称,而无需重新加载所有数据,例如:adapter.notifydatasetchanged();我更喜欢使用adapter.notifyItemChanged(int position)
片段B 中的RecyclerView加载了所有数据后,片段B 具有可动态加载的Recyclerview,它刷新了整个Arraylist,因此我之前更改过的数据(Recyclerview全部加载)不刷新,仅最后一次调用data_list7.set(modify_position,item);有效,较早更改的项未显示或返回到previos状态(在RecyclerView加载所有数据并刷新Arraylist之后)为什么?
第二个问题是,由于我在Recyclerview Fragmnet B 中更改了数据,因此“较重”,当按下后退按钮时,我必须在 Fragment A 显示,然后返回片段A ,然后我也必须更新此数据...(不重新加载所有数据)。 另外的麻烦是片段A 使用了不同的RecyclerView Adapter 因此,我必须发送数据,然后使用片段A 中的onResumeonStart方法进行刷新,但要怎么做。 这些解决方案浮现在脑海:关于第二个问题。
1 。通过以下方式发送数据:可打包
2 。通过Intent发送数据
3.在RecyclerView_Adapter.class中实现我自己的界面
4.也许在RecyclerViewRecyclerView_Adapter中有一些现成的方法(内置于Android中)
5.也许我应该在onBindViewHolder中进行一些更改,以刷新我的项目...
如果是第一个问题:
代码

if(resultCode == Activity.RESULT_OK){               
                  int modify_position = data.getIntExtra("key4",item);
                  mAdapter_details.notifyItemChanged(modify_position);
                }

我应该放入 Array 或使用 while / for循环
我需要多次使用:

data_list7.set(modify_position,item);               
mAdapter_details.notifyItemChanged(modify_position);

那么,谢谢大家。

解决方法

解决方案1.您可以将数据存储在Room数据库中,并通过UI上的LiveData<List<MyItem>>进行观察并更新适配器。

解决方案2。您可以在两个片段之间共享ViewModel,而无需存储在数据库中

解决方案3.通过new Result API

在片段之间传递数据

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。