Внедрение Google Pay в Xamarin.Android с MvvmCross 6.0 - PullRequest
0 голосов
/ 20 декабря 2018

В предыдущей версии MvvmCross (5.7) использовалась следующая Навигация:

ShowViewModel<SecondViewModel>(myNavigation);

Был выполнен переход, нарисован View (SecondView), все было нормально.Но после обновления MvvmCross до версии 6 навигация была заменена на:

_navigationService.Navigate< SecondViewModel, options, DestructionResult<settings>>(new params { navigation = myNavigation });

И в обычном случае все работает нормально, но если запустить переход из GooglePayFragment:

SupportFragmentManager.BeginTransaction()
.Add(Resource.Id.dynamic_wallet_fragment, _selectionWalletFragment)
.Commit();

Послеобработка полученного намерения:

private void DoAndroidPay(Intent data)
{
    mFullWallet = data.GetParcelableExtra (WalletConstants.ExtraFullWallet).JavaCast<FullWallet>();
    var token = mFullWallet.PaymentMethodToken;
    ViewModel.DoPayWithAndroidPay (token.Token);
}

public void DoPayWithAndroidPay(string paymentTokenJson)
{
   _navigationService.Navigate< SecondViewModel, Params, DestructionResult<Params>>(new Params { token = paymentTokenJson });
}

переход выполнен, логика работает, но представление SecondViewModel не отрисовывается.Если SecondViewModel содержит переход к SomeViewModel, он выполняется нормально (SomeView отображается).

Временно решил проблему, заменив пустую страницу, которая приведет вас к SecondViewModel.

public class TemporaryPayViewModel : LoadingViewModel<Params, DestructionResult<Params>>
{
    private readonly IMvxNavigationService _navigationService;

    public override void Prepare(Params parameter)
        {
            Initialize (parameter.token);
        }
    private async void Initialize(string paymentTokenJson)
        {
            if (!await GetPaymentFormUrl(paymentTokenJson))
                return;
            await _navigationService.Navigate< SecondViewModel, Params, DestructionResult<Params>>(new Params { token = paymentTokenJson });
        }
}

Howудалить этот обходной путь, и сделать второй экран (SecondViewModel) будет нарисован после нажатия Pay во фрагменте из GooglePay (Android.Gms.Wallet.Fragment)?

...