Заменить вкладку ViewModel из TabHost - PullRequest
0 голосов
/ 02 июля 2019

У меня есть TabHost с 4 вкладками. Одна из них, вкладка «Профиль», содержит процесс регистрации: если пользователь не зарегистрирован, на вкладке «Профиль» должен появиться фрагмент «Создать учетную запись», а когда пользователь уже зарегистрирован, он должен отображать учетную запись профиля.

Я создал вкладки так:

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 к одной из вкладок после того, как произойдет вход / регистрация. Кто-нибудь знает какой-либо механизм для этого?

...