onResume () - для переключения между несколькими фрагментами CHILD - PullRequest
0 голосов
/ 02 сентября 2018

Основная проблема у меня заключается в том, что я пытаюсь заставить функцию обновления выполняться каждый раз, когда я возвращаюсь к определенному фрагменту.

До сих пор я использовал обходной путь использования setUserVisibleHint (), как показано ниже.

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser) {
        refresh();
    }
}

Однако это работает только при переключении между моим основным фрагментом и этим фрагментом, о котором идет речь . Что мне интересно, так это как заставить этот код выполняться, когда я переключаюсь с одной из моих других вкладок?

Помощь будет высоко ценится.

Ответы [ 3 ]

0 голосов
/ 02 сентября 2018

Основная причина: Это функция Android под названием offscreen page limit, она будет сохранять количество фрагментов по обе стороны от текущего фрагмента, значение по умолчанию равно 1. В вашем случае использование setUserVisibleHint означает недостаточно для обновления данных.

Решение:

public class YourFragment extends Fragment {

        @Override
        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,Bundle savedInstanceState) {
            if (getUserVisibleHint()) { // fragment is visible to users.
                refresh();
            }
            return super.onCreateView(inflater, container, savedInstanceState);
        }

        @Override
        public void setUserVisibleHint(boolean isVisibleToUser) {
            super.setUserVisibleHint(isVisibleToUser);
            if (isVisibleToUser && isResumed()) { // fragment is visible to users
                refresh();
            }
        }

        public void refresh(){

        }
}
0 голосов
/ 02 сентября 2018

Фрагменты внутри пейджера действуют как видимый , даже если в данный момент нет видимых для пользователя, затронутые фрагменты различаются в зависимости от пейджера offscreenPageLimit, поэтому при попытке обновить фрагмент внутри setUserVisibleHint или onResume не действует при использовании пейджера.

Как бы то ни было, это нормально, так как предполагается, что цель Pager - позволить пользователю переключаться между страницами при переключении вкладок в браузере. Если вы все еще настаиваете на обновлении страниц, вы можете сделать это внутри пейджера addOnPageChangeListener следующим образом:

viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener(){
            @Override
            public void onPageSelected(int position) {
                super.onPageSelected(position);

                Fragment fragment = getSupportFragmentManager().findFragmentByTag("android:switcher:" + R.id.pager + ":" + position);
                if(fragment != null && fragment instanceof RefreshableFragment)
                    ((RefreshableFragment) fragment).refresh();

            }
        });
0 голосов
/ 02 сентября 2018

Под фрагментом вы должны вызывать свой метод при onResume() обратном вызове фрагмента.

public void onResume(){
  super.onResume();
  .....
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...