У меня есть фрагмент ;
MyFragment myFrag = new MyFragment();
Я помещаю пакет данных в этот фрагмент:
Bundle bundle = new Bundle();
bundle.putString("TEST", "test");
myFrag.setArguments(bundle);
Затем я заменяю старый фрагмент этим и помещаю в стопку:
//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();
Позже я pop backstack с указанным выше идентификатором транзакции (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);
Я не уверен, действительно ли мой приведенный выше код может де -активировать фрагмент, так как я не нашел, как активировать -фрагмент.:(
После этого, когда я снова пытаюсь установить данные пакета в свой фрагмент myFrag
, я все равно получаю ту же ошибку:
Java.lang.IllegalStateException: fragment already active
Кажется, даже я удалил фрагмент, он все еще активен... Почему? Как сделать -активным фрагмент?