我有一个标签式活动,其中一个标签有最喜欢的电影回收列表。在另一个选项卡中,将显示所有电影,并且单击一部电影将打开电影详细信息活动,在那里他可以收藏该电影。我只在共享偏好中保存喜欢的电影ID。回到最喜欢的标签后,我可以获取所有电影并显示它,但是对于每一个新电影的添加,获取所有喜欢的项目并不是一个好主意,并为新喜欢的电影维护静态变量并刷新列表看起来不是一个好主意。
我正在考虑使用接口,广播接收器或RxJava方法。但是对于接口,我不能一直在电影细节活动中保存最喜欢的标签实例。 Rxjava的Publish主题也很好,但是我需要保持静态引用以从电影细节活动中发送事件。
我认为广播接收器或Rxjava方法是最好的方法。请帮我选择正确的实施方案。
答案 0 :(得分:0)
在您的情况下,您需要指定setOffscreenPageLimit 0,这样当您在第二页时,第一页被销毁,反之亦然。
因此,每次您再次标记listView
或recylerView
加载。
mViewPager = (ViewPager)findViewById(R.id.pager);
mViewPager.setOffscreenPageLimit(0);
答案 1 :(得分:0)
在下一个片段中获得响应后,您可以从前一个片段中广播Intent确保只加载下一个片段/选项卡,您也可以在Activity中设置数据,这样如果数据片段中的任何更改都可以合并它和不覆盖destroyItem
这将
帮助重新创建fagment对象,你将得到新的数据......当
你必须从你的下一个片段到之前的片段进行更改!
@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
Intent intent = new Intent("key_to_identify_the_broadcast");
Bundle bundle = new Bundle();
bundle.putString("edttext", json.toString());
intent.putExtra("bundle_key_for_intent", bundle);
context.sendBroadcast(intent);
}
然后您可以使用BroadcastReceiver类
接收片段中的包private final BroadcastReceiver mHandleMessageReceiver = new
BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle =
intent.getExtras().getBundle("bundle_key_for_intent");
if(bundle!=null){
String edttext = bundle.getString("edttext");
}
//you can call any of your methods for using this bundle for your use case
}
};
在片段的onCreateView()中,您需要先注册广播接收器,否则不会触发此广播接收器
IntentFilter filter = new IntentFilter("key_to_identify_the_broadcast");
getActivity().getApplicationContext().
registerReceiver(mHandleMessageReceiver, filter);
最后,您可以取消注册接收器以避免任何异常
@Override
public void onDestroy() {
try {
getActivity().getApplicationContext().
unregisterReceiver(mHandleMessageReceiver);
} catch (Exception e) {
Log.e("UnRegister Error", "> " + e.getMessage());
}
super.onDestroy();
}
您可以在所有片段中创建单独的广播接收器,并使用相同的广播将数据广播到所有片段。您还可以对不同的片段使用不同的键,然后使用特定片段的特定键进行广播。