У меня есть приложение с вкладками, которое использует MvxTabsFragmentActivity.Когда я перемещаюсь между вкладками, происходит правильное поведение, но в первый раз, когда я пытаюсь перемещаться внутри фрагмента, вызываемый фрагмент не заменяется.
Я попытался использовать как IMvxNavigationService, так и классический метод, используяShowViewModel, но они оба действуют одинаково.
Я также использовал собственный презентатор для показа фрагментов, но с ним или без него проблема остается прежней.
Есть изображение с экраном печатиhttps://imgur.com/a/cfRWlsl
Красным цветом выделен фрагмент, к которому я направляюсь, а черным - предыдущий фрагмент.
В этом представлении есть кнопка, необходимая для навигации:
public class TrackView : MvxFragment<TrackViewModel>
{
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
base.OnCreateView(inflater, container, savedInstanceState);
var view = this.BindingInflate(Resource.Layout.track_layout, null);
var nextButton = view.FindViewById<Button>(Resource.Id.navigate);
var set = this.CreateBindingSet<TrackView, TrackViewModel>();
set.Bind(nextButton).To(vm => vm.NavigateEventCommand);
set.Apply();
return view;
}
}
Это его ViewModel:
public class TrackViewModel : MvxViewModel
{
private readonly IMvxNavigationService _navigationService;
public TrackViewModel(IMvxNavigationService navigationService)
{
this._navigationService = navigationService;
}
public IMvxCommand NavigateEventCommand => new MvxAsyncCommand(NavigateCommand);
private async Task NavigateCommand()
{
await _navigationService.Navigate<RegistrationViewModel>();
}
}
Это представление, к которому я направляюсь:
public class RegistrationView : MvxFragment
{
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
base.OnCreateView(inflater, container, savedInstanceState);
var view = this.BindingInflate(Resource.Layout.registration_layout, null);
//var set = this.CreateBindingSet<RegistrationView, RegistrationViewModel>();
//set.Apply();
return view;
}
}
Это его ViewModel:
public class RegistrationViewModel : MvxViewModel
{
}
У меня также есть приложение с вкладками, которое использует MvxTabsFragmentActivity, и я создаю вкладки следующим образом:
protected override void AddTabs(Bundle args)
{
this.AddTab<TrackView>(
args,
Mvx.IocConstruct<TrackViewModel>(),
this.CreateTabFor("0", Resource.Drawable.ic_track, "Track"));
this.AddTab<SendView>(
args,
new SendViewModel(),
this.CreateTabFor("1", Resource.Drawable.ic_send, "Send"));
this.AddTab<ProfileView>(
args,
new ProfileViewModel(),
this.CreateTabFor("2", Resource.Drawable.ic_profile, "Profile"));
this.AddTab<MoreView>(
args,
new MoreViewModel(),
this.CreateTabFor("3", Resource.Drawable.ic_more, "More"));
}
У меня есть пользовательский докладчик, который зарегистрированТаким образом, в основном классе:
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
this.tabHost = this.FindViewById<TabHost>(Android.Resource.Id.TabHost);
presenter = (DroidPresenter)Mvx.Resolve<IMvxAndroidViewPresenter>();
var initialFragment = new TrackView() { ViewModel = Mvx.IocConstruct<TrackViewModel>() };
presenter.RegisterFragmentManager(FragmentManager, initialFragment);
}
Как я уже говорил, с докладчиком или без него такое же поведение.
Я использую MvvmCross 5.7.