如何从Xamarin Android Activity跳转至Xamarin Forms页面
解决Xamarin Android Activity跳转至Xamarin Forms页面的问题
你的两种方法都错在混淆了**Android原生布局(.axml)和Xamarin.Forms页面(.xaml)**的概念,以下是正确的实现方式:
核心错误分析
- 第一种方法里你实例化的
zxing_android.Resources.layout.Page2()是Android的原生布局文件,不是Xamarin.Forms的ContentPage类,无法通过Forms导航栈跳转。 - 第二种方法用
Intent跳转的是Activity类型,但你的Page2是Forms页面,不是Android原生Activity,所以Intent无法识别。
正确实现步骤
前提准备
确保你的项目中已初始化Xamarin.Forms:在MainActivity的OnCreate方法中添加初始化代码:
protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); Xamarin.Forms.Forms.Init(this, savedInstanceState); // 必须调用,初始化Forms环境 // 你的其他初始化代码 }
方法一:通过Forms导航栈跳转(适用于已有Forms主导航的场景)
如果你的Forms应用已经设置了NavigationPage作为主页面,直接调用Forms导航方法:
// 1. 获取Forms的主导航页 if (Xamarin.Forms.Application.Current.MainPage is Xamarin.Forms.NavigationPage navPage) { // 2. 实例化你的Forms Page(注意:这里是继承自ContentPage的XAML页面类,不是Android的.axml) var targetPage = new zxing_android.Page2(); // 3. 跳转到目标页面 navPage.Navigation.PushModalAsync(targetPage); }
方法二:用Android Activity承载Forms页面(适用于从原生Activity独立打开Forms页面)
- 创建一个继承自
FormsAppCompatActivity的Android Activity,用来承载Forms页面:
[Activity(Label = "Page2承载页")] public class Page2HostActivity : Xamarin.Forms.Platform.Android.FormsAppCompatActivity { protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); Xamarin.Forms.Forms.Init(this, savedInstanceState); // 将Forms页面设置为当前Activity的内容 SetPage(new zxing_android.Page2()); } }
- 在
MainActivity中通过Intent跳转到这个承载Activity:
var intent = new Intent(this, typeof(Page2HostActivity)); StartActivity(intent);
关键注意事项
- 你的
Page2必须是Xamarin.Forms.ContentPage的子类(对应XAML文件Page2.xaml和后台代码Page2.xaml.cs),而不是Android项目Resources/layout下的.axml布局文件。 - 如果是跨平台项目,Forms页面建议放在共享库(Shared Project/.NET Standard Library)中,Android项目引用该库即可。
内容的提问来源于stack exchange,提问作者Samara Bravo
相关产品推荐
相关产品推荐

