从TabHost替换Tab的ViewModel

时间:2019-07-02 14:07:52

标签: android android-tabhost

我有一个带有4个标签的TabHost。其中之一,“配置文件”选项卡包含注册过程:当用户未注册时,在“配置文件”选项卡中应显示一些“创建帐户”片段,当用户已注册时,则应显示“配置文件帐户”。

我创建了这样的标签:

protected override void AddTabs(Bundle args){
  AddTab<TrackHomeView>(
                args,
                Mvx.IoCProvider.IoCConstruct<TrackHomeViewModel>(),
                CreateTabFor("0", Resource.Drawable.ic_track_icon, Strings.Track));
            AddTab<SendView>(
                args,
                Mvx.IoCProvider.IoCConstruct<SendViewModel>(),
                CreateTabFor("1", Resource.Drawable.ic_send_icon, Strings.Send));

            var isUserLoggedIn = MainViewModel.IsUserLoggedIn();
            if (isUserLoggedIn)
            {
                AddTab<ProfileView>(
                    args,
                    Mvx.IoCProvider.IoCConstruct<ProfileViewModel>(),
                    CreateTabFor("2", Resource.Drawable.ic_profile_icon, Strings.Profile));
            }
            else
            {
                AddTab<CreateAccountView>(
                    args,
                    Mvx.IoCProvider.IoCConstruct<CreateAccountViewModel>(),
                    CreateTabFor("2", Resource.Drawable.ic_profile_icon, Strings.Profile));
            }

            AddTab<MoreView>(
                args,
                Mvx.IoCProvider.IoCConstruct<MoreViewModel>(),
                CreateTabFor("3", Resource.Drawable.ic_more_icon, Strings.More));
}

每个选项卡都这样创建:

        private TabHost.TabSpec CreateTabFor(string tabSpec, int imageId, string title)
        {
            var tabView = this.BindingInflate(Resource.Layout.custom_tab, null);

            tabView.FindViewById<ImageView>(Resource.Id.tabImage).SetImageResource(imageId);
            tabView.FindViewById<TextView>(Resource.Id.tabTitle).Text = title;

            TabHost = FindViewById<TabHost>(global::Android.Resource.Id.TabHost);
            TabHost.TabWidget.SetDividerDrawable(null);
            TabHost.Setup();

            var spec = TabHost.NewTabSpec(tabSpec);
            spec.SetIndicator(tabView);
            return spec;
        }

我想创建一种机制,当用户完成注册过程时,将重新创建所有选项卡。 我尝试了一些东西:

TabHost.ClearAllTabs();
AddTabs(Intent.Extras);

但是出现错误,选项卡已经创建。

我想在登录/注册过程发生后将另一个ViewModel附加到一个选项卡上。有人知道这样做的任何机制吗?

0 个答案:

没有答案