【发布时间】:2020-11-07 20:34:21
【问题描述】:
我有MainActivity.class 和两个Fragments 都有RecyclerView。从 Fragment A,我使用 fragmentTransaction.add(R.id.fragment_container1, fragment_b); 转到 Fragment B -->(简而言之,来自 Sqldatabase 的数据放入 ArrayList)
现在在片段B中,当我更改single RecyclerView Card 中的一些数据时,我正在使用onActivityResult 更新RecyclerView,如下所示:
@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); 有效,较早更改的项目未显示或返回到之前的状态(在 RecyclerView 加载所有数据并刷新 Arraylist 之后)为什么?
第二个问题是“更重”,因为我在Recyclerview 的 Fragmnet B 中更改了数据,当按下返回按钮时,我必须在 Fragmnet B 中显示,我返回到 Fragment A 然后我也必须更新这些数据......(无需重新加载所有数据)。
另外麻烦的是 Fragment A 使用不同的RecyclerView Adapter
所以我必须发送数据,然后用 Fragment A 中的onResume 或onStart 方法刷新它,但如何做到这一点。
我想到了这些解决方案:关于第二个问题。
1.通过 Parcelable 发送数据
2.通过 Intent 发送数据
3.在RecyclerView_Adapter.class实现我自己的接口
4.也许RecyclerView或RecyclerView_Adapter中有一些现成的方法(Android内置)
5.也许我应该对onBindViewHolder 进行一些更改,从那里刷新我的项目...
如果关于第一个问题:
代码:
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);
}
我应该放入 Array 或使用 while/for 循环。
我需要多次使用这个:
data_list7.set(modify_position,item);
mAdapter_details.notifyItemChanged(modify_position);
就这些了,先谢谢了。
【问题讨论】:
-
首先要重新加载Fragment A,可以将transaction.add改为transaction.replace
-
是的,我知道,“添加”是我有意识的。
标签: android android-fragments arraylist android-recyclerview data-transfer