2014-09-28 45 views
0

我的Android應用程序正在使用FragmentTabHost並具有4個選項卡A,B,C,D。 我在標籤A中帶有A1片段,並且我導航到標籤A中的第二個片段A2, 然後我切換到標籤B,然後切換回標籤A.現在我單擊後面的按鈕,它將調用popBackStack()方法,我碰到說IllegalStateException Fragment A1已經添加。 你能幫忙嗎? 這是我以前在主標籤活動來創建標籤中的代碼,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 2014-09-28 13:04:58

+0

我剛剛更新了我的帖子。謝謝 – kenvu 2014-09-28 14:50:59

回答

0

它看起來像一般的答案是「讓你自己回來堆棧」。這可能取決於每個選項卡上片段的內容,但在我的情況下,內容本身具有子片段,這似乎妨礙了後端堆棧正常工作。

我做了一些研究,發現這個帖子,從Android團隊中的一員:https://stackoverflow.com/a/8888195/91165

除非你的應用程序有很多可能的前後方向一個複雜的導航流程,它幾乎可以被容易只是處理直接導航狀態而不是使用堆棧。 (在我的情況下,堆棧只會有一個「正確」的回輸入 - 從全部子片段轉到一個單獨的片段。水平導航沒有添加到後端堆棧,我認爲構建在後面的堆棧會更有效率,但看到這個後,我不這麼認爲)。

相關問題