Несколько вкладок ViewPager Popbackstack - PullRequest
0 голосов
/ 02 мая 2020

У меня есть следующая структура:

Активность -> TabLayout + Viewpager

ViewPager -> RootFragment1, RootFragment2

RootFragment1 -> FirstFragment1

RootFragment2 -> FirstFragment2

Как FirstFragment1, так и FirstFragment2 имеют виды переработчика, и когда я выбираю из них элемент, я заменяю FirstFragment1 на SecondFragment1. То же самое для FirstFragment2. Я заменяю его на SecondFragment2.

Вот код:

Я присоединяю FirstFragment1 и FirstFragment2 к их соответствующим корням, например:

        final FragmentTransaction ft = getChildFragmentManager().beginTransaction();
        ft.replace(R.id.root1, FirstFragment1.newInstance(), "TAG1");
        ft.commit();

Для FirstFragment2 тег "TAG2"

Я добавляю этот метод popbackstack к обоим root фрагментам:

public boolean popBackStack() {
        if(getChildFragmentManager().getBackStackEntryCount() > 0) {
            getChildFragmentManager().popBackStackImmediate();
            return true;
        } else
            return false;
    }

Вот как я заменяю фрагменты в адаптерах просмотра повторов в onBindViewHolder:

holder.image.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                FragmentManager manager = ((AppCompatActivity)context).getSupportFragmentManager();

                FragmentTransaction transaction = manager.beginTransaction();
                Fragment fragment = SecondFragment1.newInstance();
                transaction
                        .replace(R.id.root1, fragment,"TAG1")
                        .addToBackStack(null)
                        .commit();
    }

И я перезаписываю onBackPressed в основной активности следующим образом:

@Override
    public void onBackPressed() {
        if (ViewPager.getCurrentItem() == 0) {
            RootFragment1 fragment = ((RootFragment1) ViewPagerController.getItem(0));
            if (!fragment.popBackStack())
                super.onBackPressed();
        } else if (ViewPager.getCurrentItem() == 1) {
            RootFragment2 fragment = ((RootFragment2) ViewPagerController.getItem(1));
            if (!fragment.popBackStack())
                super.onBackPressed();
        } else
            super.onBackPressed();
    }

SecondFragment1 и SecondFragment2 открываются очень хорошо из первых фрагментов, но когда я нажимаю кнопку "Назад", приложение вылетает, и я получаю ошибка:

Fragment RootFragment1{------} (------------------)} has not been attached yet.

, указывающая мне на if (! фрагмент.popBackStack ()) из Main Activity и if (getChildFragmentManager (). getBackStackEntryCount ()> 0) из RootFragment1 в методе popBackStack.

Я не знаю, что может вызвать проблему. Если кто-нибудь знает, что я делаю не так, буду признателен за помощь.

Спасибо!

...