У меня есть следующая структура:
Активность -> 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.
Я не знаю, что может вызвать проблему. Если кто-нибудь знает, что я делаю не так, буду признателен за помощь.
Спасибо!