onCreate на фрагменте всегда начинаются с плохой позиции - PullRequest
0 голосов
/ 16 января 2019

Во всем приведенном примере использования фрагментов я вижу проблему.

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

Во всех случаях вызывается onCreate фрагмента 1 и 2, когда необходимо отобразить страницу 1, а после вызова onCreate фрагмента 3, когда необходимо отображать страницу 2.

Почему эта проблема?

Ответы [ 2 ]

0 голосов
/ 16 января 2019

хорошо решено с этим

private boolean isViewShown = false;
private boolean isFragmentLoaded = false;

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser   && !isFragmentLoaded) {
        isViewShown = true;
        TableLayout table = (TableLayout)getActivity().findViewById(R.id.table);
        display_album(table);

        isFragmentLoaded = true;
    } else {
        isViewShown = false;
    }
}
0 голосов
/ 16 января 2019

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

Из "swipe" я предполагаю, что вы размещаете фрагменты в ViewPager. Он имеет лимит закадровых страниц , который контролирует, сколько фрагментов предварительно создано на каждой стороне текущей страницы. По умолчанию это 1, поэтому на странице 0 также создается фрагмент страницы 1.

Если вы действительно хотите, чтобы фрагмент onCreate() s запускался именно тогда, когда фрагмент становится видимым, установите для предела страницы за пределами экрана значение 0. Установка предела для страницы на 0 не работает, так как минимум по умолчанию равен 1 .

Если вам просто интересно определить, когда фрагмент становится видимым, вы можете подключить до setUserVisibleHint().

...