2014-06-13 2 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

Вы можете добавить вспомогательный метод в действие. Фрагменты всегда отображаются в действии. SO используя активность, вы можете делиться данными, что вы хотите. Надежный фрагмент загружен в одну активность.

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 
    } 
} 

Другой способ - просто объявить класс и сохранить ваши данные в статике, чтобы они были доступны всем компонентам.

Или вы можете определить данные в классе приложения, которые будут доступны из контекста приложения (то есть из каждого компонента андроида)