2016-04-23 105 views
0

我正在學習如何正確使用片段。 我有4個片段:FragmentManager.popBackStack()將當前片段添加到片段

  • 加載
  • 完整

應該相互替換在該序列:

==>正在加載 ==> ==>加載 ==>完整

方法改變我的片段A到加載:

LoadingFragment loadingFragment = new LoadingFragment(); 

    Bundle bundle = new Bundle(); 
    bundle.putBoolean("fragmentA", true); 

    loadingFragment.setArguments(bundle); 

    getFragmentManager().beginTransaction() 
      .replace(R.id.fragment_container, loadingFragment) 
      .addToBackStack(null) 
      .commit(); 

更改片段B到加載看起來類似(只是論點明顯的變化)

改變將片段裝載到片段B中的方法:

new Thread(new Runnable() { 
     @Override 
     public void run() { 
      try { 
       Thread.sleep(1000); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 

      getFragmentManager().beginTransaction() 
        .replace(R.id.fragment_container, new FragmentB()) 
        .commit(); 

     } 
    }).start(); 

Thread.sleep(...)只是一個很長的操作... 顯然我不是在這次添加.addToBackStack(null)

好的。現在的問題:

當我使用getFragmentManager().popBackStack()方法,以前的片段(A)以下(我的片段容器的LinearLayout)加入我的實際片段而不是保換它。據此:https://stackoverflow.com/a/17793959/3279023它應該工作,但事實並非如此。

回答

2

您所遇到的行爲對我來說看起來還不錯。 popBackStack()反轉最後保存操作,在你的情況下是:replace A with Loading

因此,它取代LoadingA,但這顯然沒有影響B,您添加沒有記錄事務。

在這兩種情況下,解決方案都可以使用addToBackStack(),以便兩個事務都被註冊,然後再撥打popBackStack()兩次。

0

幾個片段可以使一個活動/屏幕。 Backstack就像後退箭頭或返回上一個活動/屏幕。

+0

我知道這個......但是'addToBackStack()'方法應該記住所有事務並執行和反向 – Lau