2013-04-26 53 views
0

我有一個應用程序。那就是使用Fragments。主要活動以2個片段開始。其中一個片段中包含用於在運行時添加一個3'rd片段像這樣的按鈕:保留在運行時添加的片段

button.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Activity activity = getActivity(); 

      if (fragment3 == null) { 
       getFragmentManager() 
       .beginTransaction() 
       .add(R.id.fragment_content3, new ThirdFragment()) 
       .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE) 
       .commit(); 
     } 

的ThirdFragment類看起來是這樣的:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Log.v(getTag(), "FRAG onCreate CALLED!"); 
    this.setRetainInstance(true); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

View view = inflater.inflate(R.layout.third_fragment, container, false); 
return view; 

的問題是,我無法理解如何在重新創建Activity時保持該片段的視圖不被刪除。我試圖@Override onCreate()方法並使用setRetainInstance(true)無濟於事。

所以,我的問題是:

什麼是正確的做法,以保持一個動態的(在運行時)從當活動被重新被刪除添加片段?

回答

0

在這種情況下,可以確保通過實施額外的回調方法,可以讓您保存您的活動狀態的信息保留有關的活動狀態是重要的信息:onSaveInstanceState()

系統在使活動易受破壞之前調用onSaveInstanceState()。系統將此方法傳遞給一個Bundle,您可以在其中使用諸如putString()和putInt()之類的方法將關於該活動的狀態信息保存爲名稱 - 值對。然後,如果系統殺死您的申請流程,並且用戶返回您的活動,系統會重新創建活動並將套件傳遞給onCreate()onRestoreInstanceState()。使用這些方法中的任何一種,都可以從Bundle中提取已保存的狀態並恢復活動狀態。如果沒有要恢復的狀態信息,則傳遞給您的Bundle爲null(這是第一次創建活動時的情況)。 Android Documentation

解決方案:

所以,你只有內部方法onSaveInstanceState()捆綁,以保持你的片段信息,並作爲片段是一個複雜的對象,你不能直接存儲束的內側。

我的建議是@覆蓋onSaveInstanceState()並使用boolean標誌來指示您的第三個片段是否應該連接(可見)。很快,您可以使用OnCreate() or onRestoreInstanceState()並獲取包來讀取您的標誌,並根據它,您可以創建或不創建您的片段。