2014-09-28 4 views
0

Приложение для Android использует FragmentTabHost и имеет 4 вкладки A, B, C, D. Я нахожусь в закладке A с фрагментом A1, и я перехожу к второму фрагменту A2 в закладке A, , затем переключитесь на вкладку B, а затем вернусь к вкладке A. Теперь я нажимаю кнопку «Назад», которая вызывается popBackStack() метод, и я получил крах, сказав, что фрагмент IllegalStateException Fragment уже добавлен. Вы можете помочь? Это код, который я использовал для создания вкладок в главной вкладке деятельности,Android FragmentTabHost popBackStack() вызвал добавление фрагмента IllegalStateException

mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost); 
    mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent); 
    mTabHost.addTab(mTabHost.newTabSpec("profile").setIndicator("Profile"), 
      ProfileFragment.class, null); 
    mTabHost.addTab(mTabHost.newTabSpec("friends").setIndicator("Friends"), 
      FriendsFragmentTab.class, null); 
    mTabHost.addTab(
      mTabHost.newTabSpec("notifications").setIndicator(
        "Notifications"), NotificationFragment.class, null); 

    mTabHost.setOnTabChangedListener(new OnTabChangeListener() { 
     public void onTabChanged(String tabID) { 
      mTabHost.clearFocus(); 
     } 
    }); 

и я использовал этот код для обработки нажатия кнопки назад, FragmentManager fragmentManager = getSupportFragmentManager();

fragmentManager.popBackStack();

+0

, пожалуйста, внесите свой код! – mmlooloo

+0

Я только что обновил свой пост. благодаря – kenvu

ответ

0

Похоже, что общий ответ: «Сделайте свой собственный задний стоп». Это может зависеть от того, каково содержимое фрагментов на каждой вкладке, но в моем случае само содержимое имело дочерние фрагменты, которые, как представляется, мешали обратному стеклу работать правильно.

Я сделал некоторые исследования и нашел этот пост, от члена Android команды: https://stackoverflow.com/a/8888195/91165

Если ваше приложение не имеет сложный навигационный поток с большим количеством возможных обратных направлений, это может быть почти легче просто справиться прямое состояние навигации, а не использование стека. (В моем случае в стеке будет только один «правильный» задний вход - назад от все дочерние фрагменты переходят к одному фрагменту дома. Горизонтальная навигация не была добавлена ​​в задний стек в любом случае. Я думал, что построенный -in back stack будет более эффективным, но, увидев это, я так не думаю.)

Смежные вопросы