Ошибка DialogFragment, начиная с нескольких фрагментов - PullRequest
1 голос
/ 13 марта 2020

В настоящее время у меня есть ViewPager с 3 вкладками. Каждая вкладка является фрагментом. Я сделал собственный диалог-фрагмент для входа в систему. Я хочу, чтобы logindialog открывался только тогда, когда я go на моей 3-й вкладке. В моем onCreateView я создал новый объект моего logindialog и шоу. Моя проблема заключается в том, что всякий раз, когда я переключаюсь со своей 1-й вкладки на 2-ю, также появляется диалоговое окно, и я этого не хочу.

Это мой адаптер видового пейджера

    public Fragment getItem(int position) {

        switch (position) {
            case 0:
                return frag1;
            case 1:
                return frag2;
            case 2:
                return frag3;
            default:
                return null;
        }
    }

Мой 3-й Фраг

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        root = inflater.inflate(R.layout.fragment_tab_annonce, container, false);

        DialogFragment loginDialog = new DialogFragment();
        loginDialog .show(getActivity().getSupportFragmentManager(), "customLogin");

        return root;
    }

1 Ответ

1 голос
/ 13 марта 2020

ViewPager создаст и сохранит «закадровые» страницы для оптимизации производительности (по умолчанию одна закадровая страница в любом направлении). На практике это означает, что когда вы находитесь на странице 1, страница 2 уже создана вне экрана. Когда вы переключаетесь со страницы 1 на страницу 2, теперь страница 3 создается вне экрана (и страница 1 сохраняется на случай, если вы захотите вернуться к ней).

Это означает, что onCreateView() просто не правильное место для отображения сообщения об ошибке.

Возможно, вы можете создать свой собственный подкласс ViewPager.SimpleOnPageChangeListener и переопределить onPageSelected(), чтобы показать диалоговое окно.

ViewPager.OnPageChangeListener listener = new ViewPager.SimpleOnPageChangeListener() {

    @Override
    public void onPageSelected(int position) {
        if (position == 2) {
            // show dialog
        }
    }
};

viewPager.addOnPageChangeListener(listener);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...