Проблема жизненного цикла при использовании FragmentStatePagerAdapter, Fragments - PullRequest
0 голосов
/ 17 апреля 2020

Я использую FragmentStatePagerAdapter, ViewPager. Я собираюсь использовать onSaveInstanceState путем переопределения, чтобы сохранить некоторые состояния, такие как положение курсора EditText в каждом фрагменте. Но когда я выбираю первый фрагмент, а следующий выбираю второй фрагмент , onSaveInstanceState первого фрагмента не вызывается. Если я выбираю первый и следующий, выбираем третий фрагмент, то вызывается onSaveInstanceState первого фрагмента.
В этом случае выбора первого фрагмента и следующего второго фрагмента даже onPause первого фрагмента не вызывается. В чем причина? Как я могу решить эту проблему? Я исследовал эту проблему целый день. Но я еще не нашел решения и правильной причины. У onSaveInstanceState есть случаи, когда его можно вызвать, но как насчет onPause? Почему не вызывается onPause?

1 Ответ

0 голосов
/ 17 апреля 2020

Я нашел решение. Я использовал setUserVisibleHint . Фрагмент, я написал сохранить и восстановить логи c в setUserVisibleHint . Это работает хорошо. Это вызывается, когда фрагмент показан или скрыт. Также я использовал onViewStateRestored , onSaveInstanceState для уничтожения дел.

@Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if(isVisibleToUser) {
            if (mInputFrom != null) {
                if(isToFocus) {
                    mInputFrom.requestFocus();
                    mInputFrom.setSelection(fromCursor);
                } else {
                    mInputOut.requestFocus();
                    mInputOut.setSelection(toCursor);
                }
            }

        } else {
            if (mInputFrom != null) {
                fromCursor = mInputFrom.getSelectionStart();
                toCursor = mInputOut.getSelectionStart();
            }
        }
    }

setUservisibleHint устарел. Поэтому другой вариант заключается в том, что мы можем использовать конструктор FragmentStatePagerAdapter (фм, BEHAVIOR_SET_USER_VISIBLE_HINT ); Если мы вызовем конструктор super, как указано выше, в конструкторе нашего настроенного адаптера, который расширяет FragmentStatePagerAdapter , то onPause , onResume фрагмента будет вызываться для каждого случая скрытия или показано. Первый вариант подходит для моего случая, я думаю. Так что я воспользовался первым вариантом и решил отлично.

...