Mono 在TabHost控件的活动之间传递数据

Mono 在TabHost控件的活动之间传递数据,mono,xamarin.android,monodevelop,Mono,Xamarin.android,Monodevelop,我有一个tabhost,它可以动态地添加选项卡。我的问题是使用选定的另一个选项卡值更新一个选项卡中的数据 例如:我在TabHost活动页面中添加了两个名为“搜索和筛选”的选项卡和意图。当我从“过滤器”选项卡中选择一些微调器值(如“站点和设备”)时,我希望使用“过滤器”选项卡中的指定选择更新“搜索”选项卡列表视图 我已经附上了我的样本代码。请核实一下,并向我提出同样的建议 TabHost活动: public class TabSearch : TabActivity { protecte

我有一个tabhost,它可以动态地添加选项卡。我的问题是使用选定的另一个选项卡值更新一个选项卡中的数据

例如:我在TabHost活动页面中添加了两个名为“搜索和筛选”的选项卡和意图。当我从“过滤器”选项卡中选择一些微调器值(如“站点和设备”)时,我希望使用“过滤器”选项卡中的指定选择更新“搜索”选项卡列表视图

我已经附上了我的样本代码。请核实一下,并向我提出同样的建议

TabHost活动:

public class TabSearch : TabActivity 
{
    protected override void OnCreate(Bundle bundle)
    {
            base.OnCreate(bundle);
            SetContentView(Resource.Layout.Search_WOTab);

            TabHost.TabSpec tspec;
            Intent intent;
            intent = new Intent(this, typeof(WOSearch));
            intent.AddFlags(ActivityFlags.NewTask);
            tspec = TabHost.NewTabSpec("Search");
            tspec.SetIndicator("Search", Resources.GetDrawable(Resource.Drawable.Search));
            tspec.SetContent(intent);
            TabHost.AddTab(tspec);

            intent = new Intent(this, typeof(WOFilter));
            intent.AddFlags(ActivityFlags.NewTask);
            tspec = TabHost.NewTabSpec("Filter");
            tspec.SetIndicator("Filter", Resources.GetDrawable(Resource.Drawable.Filter));
            tspec.SetContent(intent);
            TabHost.AddTab(tspec);

            TabHost.TabChanged += (sender, e) =>
            {
                Spinner workorder = FindViewById<Spinner>(Resource.Id.sp_site);
                object Data;
                //Here always showing null to spinner control
                if (workorder!=null)
                    Data = workorder.SelectedItem;
                Toast.MakeText(this, TabHost.CurrentTab.ToString(), ToastLength.Short).Show();
            };
    }
}
公共类TabSearch:TabActivity
{
创建时受保护的覆盖无效(捆绑包)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Search\u WOTab);
TabHost.TabSpec tspec;
意图;
意向=新意向(此,类型为(WOSearch));
intent.AddFlags(ActivityFlags.NewTask);
tspec=TabHost.NewTabSpec(“搜索”);
tspec.SetIndicator(“搜索”,Resources.GetDrawable(Resource.Drawable.Search));
tspec.SetContent(意图);
TabHost.AddTab(tspec);
意向=新意向(此,类型为(WOFilter));
intent.AddFlags(ActivityFlags.NewTask);
tspec=TabHost.NewTabSpec(“过滤器”);
tspec.SetIndicator(“过滤器”,Resources.GetDrawable(Resource.Drawable.Filter));
tspec.SetContent(意图);
TabHost.AddTab(tspec);
TabHost.TabChanged+=(发件人,e)=>
{
微调器工作顺序=FindViewById(Resource.Id.sp_站点);
对象数据;
//此处始终向微调器控件显示null
if(workorder!=null)
数据=工作顺序。选择编辑项;
Toast.MakeText(this,TabHost.CurrentTab.ToString(),ToastLength.Short).Show();
};
}
}
我会做什么:

  • 在WOFilter选项卡中:

    • 当您选择一个元素时,您会更新应用程序范围内的变量(静态、SharedRef、数据库,如您所愿),比如说“wo_filter_value”。这样,WOFilter活动就不必知道任何有关WOSearch活动的信息
  • 在“搜索”选项卡中:

    • 仅在“onCreate”方法中执行初始化代码(只需一次)
    • 在“onResume”方法中执行列表显示部分,读取更新的“wo_过滤器_值”并进行相应过滤

  • 由于同一时间只显示一个选项卡,在您更改另一个选项卡上的筛选器后,您的活动在重新显示列表之前必须先通过“恢复”功能。

    请删除所有与问题无关的代码-太多了。我已更新了示例代码。请验证一下。同一时间只显示一个选项卡,对吗?是的,这是个好主意。但在我的一个场景中,我将有7个选项卡,并将有这么多控件。如何将复杂数据共享到选项卡?