如何刷新其他活动的标签中的列表视图?

时间:2017-09-11 03:12:11

标签: android listview android-recyclerview rx-android rx-java2

我有一个标签式活动,其中一个标签有最喜欢的电影回收列表。在另一个选项卡中,将显示所有电影,并且单击一部电影将打开电影详细信息活动,在那里他可以收藏该电影。我只在共享偏好中保存喜欢的电影ID。回到最喜欢的标签后,我可以获取所有电影并显示它,但是对于每一个新电影的添加,获取所有喜欢的项目并不是一个好主意,并为新喜欢的电影维护静态变量并刷新列表看起来不是一个好主意。

我正在考虑使用接口,广播接收器或RxJava方法。但是对于接口,我不能一直在电影细节活动中保存最喜欢的标签实例。 Rxjava的Publish主题也很好,但是我需要保持静态引用以从电影细节活动中发送事件。

我认为广播接收器或Rxjava方法是最好的方法。请帮我选择正确的实施方案。

2 个答案:

答案 0 :(得分:0)

在您的情况下,您需要指定setOffscreenPageLimit 0,这样当您在第二页时,第一页被销毁,反之亦然。

因此,每次您再次标记listViewrecylerView加载。

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();
}

您可以在所有片段中创建单独的广播接收器,并使用相同的广播将数据广播到所有片段。您还可以对不同的片段使用不同的键,然后使用特定片段的特定键进行广播。