Скользящие вкладки фрагментов с общим состоянием - PullRequest
0 голосов
/ 28 января 2019

У меня есть фрагмент, на котором размещено TabLayout .Я хотел бы иметь 2 вкладки, так что каждая из них является фрагментом.Я следовал этому руководству: https://guides.codepath.com/android/google-play-style-tabs-using-tablayout

Проблема, которую я пытаюсь решить, заключается в том, чтобы иметь общее состояние или способ связи между фрагментами - мой первый фрагмент будет содержать список мест (от Googleместо) и мой второй фрагмент карты с их отображением.Моя проблема в том, что, когда данные из 1-го фрагмента изменяются (например, фильтруются), фрагмент карты также должен обновлять свои данные.В идеале мне не нужно было бы заново создавать карту, если в представлении списка не произошло никаких изменений.

В моем FragmentPagerAdapter у меня есть следующий метод, который извлекает фрагменты, но я не могувыяснить способ принудительного обновления / воссоздания фрагмента, если состояние 1-го фрагмента изменилось

 @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 голосов
/ 28 января 2019

Если вы хотите обнаружить скрытие / отображение, просто переопределите

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

в вашем фрагменте.

...