2014-06-13 15 views
0

我目前有與實現FragmentTabHost與其選項卡之間共享數據的問題。如何保持跨標籤對象的引用?

我有一個包含FragmentTabHost片段設置是這樣的:

這些選項卡
public class TTTabContainerFragment: Android.Support.V4.App.Fragment{ 
    TTDataSet SharedData; 

    //OnCreate and initialization... 

public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{ 
     FragmentHost = new FragmentTabHost(Activity); 
     FragmentHost.Setup(Activity, ChildFragmentManager); 
     FragmentHost.AddTab(FragmentHost.NewTabSpec("tab1").SetIndicator(Resources.GetString(Resource.String.BOOKHOUR_ITEM_BOOKING)), new TTBookHourFragment().Class, TTDataSets.CreateArgumentBundle(SharedData)); 
     FragmentHost.AddTab(FragmentHost.NewTabSpec("tab2").SetIndicator(Resources.GetString(Resource.String.BOOKHOUR_ITEM_INFO)), new TTBookHourInfoFragment().Class, TTDataSets.CreateArgumentBundle(SharedData)); 
     FragmentHost.AddTab(FragmentHost.NewTabSpec("tab3").SetIndicator(Resources.GetString(Resource.String.BOOKHOUR_ITEM_EXPENSES)), new TTBookHourExpenseDialog().Class, TTDataSets.CreateArgumentBundle(SharedData)); 
     return FragmentHost; 
} 

public override void OnDestroyView() 
{ 
     base.OnDestroyView(); 
     FragmentHost = null; 
} 

每個需要訪問,並應能夠操縱在SharedData數據集中的數據。儘管我可以通過序列化/將SharedData集序列化爲捆綁包來「發送數據」到選項卡片段,但對容器片斷中原始DataSet的引用將丟失,並且會在選項卡片段中創建新對象。因此,數據操作不會在選項卡之間共享。

有沒有什麼辦法可以在3個標籤之間共享數據,以確保數據操作在它們之間持續存在?最好不訴諸於靜態變量。

回答

0

您可以在活動中添加支持性方法。碎片總是顯示在活動中。通過使用活動,您可以共享您想要的數據。希望片段加載相同的活動。

class MyActivity extends Activity{ 
int a; 
    void setData(int a){ 
    this.a=a 
    } 

    int getData(){ 
    return a; 
    } 


} 


class MyFragment extends Fragent{ 

    void onViewCreated{ 
    ((MyActivity)getActivity()).getData(); //Access data 
    } 
} 

其他方法是聲明類並保持您的數據爲靜態,以便它可以訪問所有組件。

或者您可以在應用程序類中定義可從應用程序上下文訪問的數據(即,來自Android的每個組件)

相關問題