2014-10-17 139 views
0

我有一個ListView活動,當點擊一個列表項時會打開一個新的片段。 我是否每次都需要創建一個新的片段?Android活動與ListView打開片段上的項目點擊

 FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); 
    fragmentTransaction.add(R.id.root_layout,new MyFragment()); 

或者將足以創建一個片段,然後使用它?

的活動:

 MyFragment myFragment = new MyFragment(); 
    ...... 

在onItemClickListener:

 FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); 
    fragmentTransaction.add(R.id.root_layout,myFragment); 
+0

與提供的解決方案相同的問題:http://stackoverflow.com/questions/ 21279882/android-create-an-activity-and-use-it-many-times-with-different-data – 2014-10-17 06:42:56

回答

1

這取決於你的情況。在大多數情況下,每個列表項打開一個不同的片段(使用不同的數據)。然後,您必須在片段中創建一個靜態newInstance(Data mySerializableData)方法,在其中使用默認構造函數,在Fragment參數See DetailFragment上傳遞數據,並在您的活動中使用fragmentTransaction.replace()來添加此片段。

當你不想讓你的片段被改變時,你只能按照你說的創建它,但是沒有必要在每個項目點擊時添加它。所以一個創作,只有一個添加。

public static final MyFragment newInstance() 
{ 
    MyFragment f = new MyFragment(); 
    return f; 
} 

,並在活動時要創建的片段 - - 該片段每次像這個 -

在您的片段類

1

不,你不需要每次都創建它。首先,不要使用「添加」,而要使用「替換」。如果片段管理器中沒有片段,則會添加您的片段,而不是將其替換。如果您使用「添加」,那麼您可能會無意中添加多個片段。

您應該檢查片段管理器中的片段並調用內容更新的方法。

例子:

myFragment = (MyFragment) fragmentManager.findFragmentById(R.id.my_fragment); 
if (myFragment == null) { 
    myFragment = MyFragment.getInstance(someDataIfNeeded); 
    fragmentManager.beginTransaction().replace(R.id.my_fragment, myFragment).commit(); 
} else { 
    myFragment.updateFragmentContent(someData); 
} 
+0

當你以這種方式使用它時,你會遇到問題,而不是創建一個新的片段,通過newInstance中的參數傳遞「someData」 (Data someData)。當您旋轉屏幕或您的應用程序在殺死(例如電話)後恢復時,您將無法獲取更新的數據。要在屏幕上顯示所有內容,你必須做一些額外的工作(onSaveInstanceState等)。參數可以爲你做任何事情。 – Mark 2014-10-17 06:50:31

+0

當然。創建中的數據是初始數據。我認爲更新的數據已經存儲在保存的包中:) – 2014-10-17 07:28:18

1

檢查實例

FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); 
fragmentTransaction.add(R.id.root_layout,MyFragment.newInstance()); 

這是很好ñ好方式...

相關問題