Xamarin表示Android OnAppearing在PopModalAsync之后不触发

dot*_*irl 6 xamarin.android xamarin xamarin.forms

在使用Modal页面的同时调用PopModalAsync之后,是否有解决Android不能触发的问题.这是一个例子:

using System;
using Xamarin.Forms;

namespace XamarinForms
{
    public class OnAppearingBug : ContentPage
    {
        Label label;
        public OnAppearingBug ()
        {
            label = new Label {
                Text = "Page"
            };
            Button button = new Button {
                Text = "PushModal"
            };
            button.Clicked += (sender, e) => Navigation.PushModalAsync (new PopModalBug ());

            Content = new StackLayout {
                Children = { label, button }
            };
        }
        protected override void OnAppearing(){
            label.Text = "OnAppearing";
        }
    }
}

using System;
using Xamarin.Forms;

namespace XamarinForms
{
    public class PopModalBug : ContentPage
    {
        public PopModalBug ()
        {
            Button button = new Button {
                Text = "Pop Back"
            };
            //Bug: This will not trigger OnAppearing on Android
            button.Clicked += (sender, e) => Navigation.PopModalAsync();

            Content = new StackLayout {
                Children = { button }
            };
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 6

另见http://forums.xamarin.com/discussion/21417/navigationpage-push-pop-event-sequence-different-across-platformshttp://forums.xamarin.com/discussion/18781/ios-and- Android的不同,行为换onappearing

但截至目前(Xamarin.Forms 1.2.2)唯一/最佳解决方案是CrisWebb上面提出的解决方案:

在您的主页上 - MessagingCenter.Subscribe(this,"popped",(sender)=> {//要运行的代码});

在您的模态页面上 - MessagingCenter.Send(this,"popped");


Rui*_*nho 0

不要忘记,await当你调用你的Async方法时,例如,按钮单击应该是这样的:

    button.Clicked += async (sender, e) => await Navigation.PopModalAsync();

    button.Clicked += async (sender, e) => await Navigation.PushModalAsync(new PopModalBug ());
Run Code Online (Sandbox Code Playgroud)