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-platforms和http://forums.xamarin.com/discussion/18781/ios-and- Android的不同,行为换onappearing
但截至目前(Xamarin.Forms 1.2.2)唯一/最佳解决方案是CrisWebb上面提出的解决方案:
在您的主页上 - MessagingCenter.Subscribe(this,"popped",(sender)=> {//要运行的代码});
在您的模态页面上 - MessagingCenter.Send(this,"popped");
不要忘记,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)
| 归档时间: |
|
| 查看次数: |
7328 次 |
| 最近记录: |