具有共享状态的“滑动片段”选项卡

时间:2019-01-28 11:21:13

标签: android android-fragments android-viewpager

我有一个片段,其中托管了 TabLayout 。我想有2个标签,每个标签都是一个片段。我一直在遵循本指南: https://guides.codepath.com/android/google-play-style-tabs-using-tablayout

我要解决的问题是共享状态或片段之间进行通信的方式-我的第一个片段将托管一个地方列表(来自Google地方),而我的第二个片段将托管一个显示它们的地图。我的问题是,当第一个片段中的数据发生更改(例如过滤)时,地图片段也应更新其数据。理想情况下,如果列表视图中未发生任何更改,则无需重新创建地图。

在我的 FragmentPagerAdapter 中,我使用以下方法来检索片段,但如果第一个片段的状态已更改,我无法找出强制更新/重新创建片段的方法

 @Override
    public Fragment getItem(int position) {
        Fragment fragment = null;

        if(position == 0){
            fragment = findFragment(PlaceListFragment.getTAG());
            if(fragment == null) {
                fragment = PlaceListFragment.newInstance(0);
            }
            return fragment;

            }else{

            fragment = findFragment(MapViewFragment.getTAG());
            if(fragment == null) {
                fragment = MapViewFragment.newInstance();
            }
            return fragment;
        }

    }

1 个答案:

答案 0 :(得分:0)

如果要检测隐藏/显示,则只需覆盖

public void onHiddenChanged(boolean hidden) {
   if(!hidden){
      //When fragment is visible
    }
    Log.i("my_fragment","setUserVisibleHint: "+isVisibleToUser);
}

 @Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if(isVisibleToUser){
      //When fragment is visible
    }
    Log.i("my_fragment","setUserVisibleHint: "+isVisibleToUser);
}

在您的片段中。