У меня есть фрагмент;
MyFragment myFrag = new MyFragment();
Я помещаю данные пакета в этот фрагмент:
Bundle bundle = new Bundle();
bundle.putString("TEST", "test");
myFrag.setArguments(bundle);
Затем я замените старый фрагмент на этот и положим на backstack:
//replace old fragment
fragmentTransaction.replace(R.id.fragment_placeholder, myFrag, "MyTag");
//put on backstack
fragmentTransaction.addToBackStack(null);
//commit & get transaction ID
int transId = fragmentTransaction.commit();
Позже я поп назад с указанным выше идентификатором транзакции (transId
):
//pop the transaction from backstack
fragmentManager.popBackStack(transId,FragmentManager.POP_BACK_STACK_INCLUSIVE);
Позже я установил данные пакета в качестве аргумента снова для моего фрагмента (myFrag
):
//Got Java.lang.IllegalStateException: fragment already active
myFrag.setArguments(bundle);
Как вы видите, мой код выше получил исключение Java.lang.IllegalStateException: fragment already active
. Я не понимаю, почему myFrag
все еще активен, хотя я вынул транзакцию из него., так или иначе, так как я получил исключение, я думал, что у меня нет выбор, но деактивировать фрагмент. Итак, я сделал:
Fragment activeFragment = fragMgr.findFragmentByTag("MyTag");
fragmentTransaction.remove(activeFragment);
Я не уверен, действительно ли мой код выше de-active, так как я не нашел, как деактивировать фрагмент.: (
После этого, когда я попытаюсь снова установить данные пакета в мой фрагмент myFrag
, я все равно получаю ту же ошибку:
Java.lang.IllegalStateException: fragment already active
Кажется, что даже я удалил фрагмент, он все еще активен... Почему? Как деактивировать фрагмент?