MVVMCross После навигации по фрагменту макет не обновляется - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть приложение с вкладками, которое использует 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.

...