我目前在使用标签之间的共享数据实现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 :(得分: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的每个组件)访问的数据