如何跨选项卡保持对对象的引用

本文关键字:对象 引用 何跨 选项 | 更新日期: 2023-09-27 18:08:31

我目前在实现一个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集序列化/打包成一个bundle来"发送数据"到选项卡片段,但对容器片段中原始数据集的引用丢失了,并且在选项卡片段中创建了一个新对象。因此,数据操作不能在制表符之间共享。

是否有任何方法可以在3个选项卡之间共享数据,以确保对数据的操作在它们之间持续存在?最好不要使用静态变量

如何跨选项卡保持对对象的引用

您可以在活动中添加支持性方法。片段总是显示在活动中。所以使用活动你可以分享你想要的数据。希望在同一活动中加载片段。

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

另一种方法是声明class并保持数据为静态,以便所有组件都可以访问它。

或者你可以在应用程序类中定义可以从应用程序上下文访问的数据(即从android的每个组件)