如何在切换Tabs时更新fragement数据

时间:2016-08-18 12:21:23

标签: android android-fragments tabs android-recyclerview

我正在使用Material Tab,我使用了3个标签。

标签A [产品列表]

具有从远程服务器填充的回收列表和数据。例如,它有产品标题,图像和喜欢的图像

标签B [收藏产品列表]

Tab C [联系我们]

我尝试实施的内容,一旦用户选择收藏夹按钮(添加到收藏夹),特定列表项目会显示在TAB_B [收藏产品列表]

我使用了共享首选项并将数据保存为Gson格式。我已经按照本教程

http://androidopentutorials.com/android-how-to-store-list-of-values-in-sharedpreferences/

问题是,一旦我添加项目并从产品列表中删除项目[标签A]表现良好,它就不会显示在标签B [收藏产品列表]中。一旦我重新启动应用程序,收藏夹产品列表将显示在选项卡b。我使用了一些像广播接收器这样的技巧,但它没有正常工作。

我使用it.neokree:MaterialTabs:0.11库来填充标签

以下是我使用的一些代码。

请指导我,我做错了。

2 个答案:

答案 0 :(得分:1)

  1. 在gradle文件中添加compile 'org.greenrobot:eventbus:3.0.0'
  2. 在每个片段中添加onCreate()

            EventBus.getDefault().register(this);
    
  3. 在每个片段中添加onDestroyView

            EventBus.getDefault().unregister(this);
    
  4. 为Event创建Java类 例如:

              public class EventUpdateList {
    
                private boolean listNeedUpdate= true;
    
                public EventUpdateList (boolean listNeedUpdate) {
                    this.listNeedUpdate= listNeedUpdate;
                }
    
                public boolean isListNeedUpdate() {
                    return listNeedUpdate;
                }
    
            }
    
  5. 在所有片段中添加

       @Subscribe(threadMode = Main)
        public void onListRefresh(EventUpdatelist eventUpdateList) 
        {
           if (eventUpdateList.isNeedListUpdate) 
        {
        // refresh your list
    
        }
    
        } 
    
  6. 在您的活动中添加

    EventBus.getDefault.post(new EventUpdateList(true));
    
  7. 所有3个片段都获取有关事件的信息以刷新列表。 您甚至可以使用完整列表发布事件来刷新而不是此布尔值并获得3个片段。

答案 1 :(得分:0)

由于您使用的lib基本上使用ViewPager来管理给定的Fragment作为Tab,因此Fragment的setUserVisibleHint方法应该是每次加载时都可以更新标签内容的地方。 / p>

public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);

        if (isVisibleToUser) {
              // Do stuffs that you want to do every time this fragment loads
        } else {
        }
}