Xamarin如何从Android项目打开Xamarin Forms页面?

3

我希望从Xamarin Android项目中打开Xamarin表单页面。在Android项目中,我创建了工具栏项图像,在其中调用事件以从Xamarin表单项目打开页面。

这是我的MainActivity.cs工具栏图像项实现:

    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity
    {
      private IMenu CurrentMenu { get; set; }
      private ImageView imgSmallC { get; set; }

      public override bool OnCreateOptionsMenu(IMenu menu)
            {
               ActionBar.DisplayOptions = ActionBarDisplayOptions.HomeAsUp | ActionBarDisplayOptions.ShowCustom | ActionBarDisplayOptions.ShowTitle | ActionBarDisplayOptions.ShowHome;  
                LayoutInflater inflater = (LayoutInflater)ActionBar.ThemedContext.GetSystemService(LayoutInflaterService);
                View customActionBarView = inflater.Inflate(Resource.Layout.actionbar_custom_view_done, null);  

                imgSmallC = (ImageView)customActionBarView.FindViewById<ImageView>(Resource.Id.ImgSmallC);

                imgSmallC.Click += (object sender, EventArgs args) =>
                {
                    StartActivity(typeof(MyPopupPage));
                };
                return base.OnCreateOptionsMenu(menu);
            }
}

在StartActivity中,我从Xamarin Forms项目调用MyPopupPage.xaml页面。但是,不幸的是,当我调试项目并单击工具栏图像时,会出现以下错误:

参数异常:类型参数名称:Type未从java类型派生。


请问您能分享一下您想出的解决方案吗?我的问题有点类似。https://stackoverflow.com/questions/58508566/cannot-open-a-xamarin-forms-page-from-xamarin-android - Saamer
1个回答

4

您不能将基于Xamarin.FormsPage作为 Android Activity使用,它们是完全不同的东西

您可以从Xamarin.Android项目中访问Xamarin.FormsApplication单例,并使用它来执行PushModelAsyncPushAsync

示例(使用完整名称空间):

    await Xamarin.Forms.Application.Current.MainPage.Navigation.PushModalAsync(new PushPageFromNative.MyPage());

一个基于依赖服务的示例:

接口:

using System;
namespace PushPageFromNative
{
    public interface IShowForm
    {
        void PushPage();
    }
}

Xamarin.Forms基础代码:

var pushFormBtn = new Button
{
    Text = "Push Form",
    VerticalOptions = LayoutOptions.CenterAndExpand,
    HorizontalOptions = LayoutOptions.CenterAndExpand,
};
pushFormBtn.Clicked += (sender, e) =>
{
        DependencyService.Get<IShowForm>().PushPage();
};

Xamarin.Android 依赖实现:

async public void PushPage()
{
    // Do some Android specific things... and then push a new Forms' Page
    await Xamarin.Forms.Application.Current.MainPage.Navigation.PushModalAsync(new PushPageFromNative.MyPage());
}

我想从Android Activity打开Xamarin Forms页面,而不是在任何按钮点击上。那么你的“基于Xamarin.Forms的代码”应该放在哪里? - Ajay Sharma
它有效了,谢谢。还有一个问题是它没有导航栏打开,所以内容页面能够带着导航栏打开吗? - Ajay Sharma
不错。在表单视图中,有没有类似的针对单个元素(例如文本标签)的东西? - GGleGrand
@GGleGrand 不确定你的意思?你想做什么? - SushiHangover
谢谢,您在这里的答案( https://dev59.com/2Jffa4cB1Zd3GeqP_rNf )解决了问题。 - GGleGrand
@SushiHangover,我在这里有一个类似的问题 https://stackoverflow.com/questions/58508566/cannot-open-a-xamarin-forms-page-from-xamarin-android。我尝试了你的解决方案,但对我来说Xamarin.Forms.Application.Current的值为空。然后我尝试初始化它和其他值(MainPage,Navigation),但是仍然无法使用该代码在前景中显示Forms页面。我也尝试过RunOnUiThread,但视图没有改变。我还尝试了从FormsApplicationActivity和FormsAppCompatActivity继承MainActivity,但没有成功。 - Saamer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接