欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#-Xamarin的Activity传值与Fragment引用

程序员文章站 2022-07-11 10:12:38
前言 我们学习任何一个新框架时,肯定都需要学习它的子页面用法,因为子页面是封装公共内容最好的容器。 在Xamarin里子页面为Fragment,翻译过来是片段的意思。 Fragment 下面我们来学习Fragment的用法。 首先创建一个类MenuFragment继承Fragment;然后重写他的O ......

前言

我们学习任何一个新框架时,肯定都需要学习它的子页面用法,因为子页面是封装公共内容最好的容器。

在xamarin里子页面为fragment,翻译过来是片段的意思。

fragment

下面我们来学习fragment的用法。

首先创建一个类menufragment继承fragment;然后重写他的oncreateview方法,代码如下:

[activity(label = "kibaapp")]
public class menufragment : fragment
{ 
    public override view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate)
    { 
        view view = inflater.inflate(resource.layout.menufragment, container, false); 
        return view; 
    }
}

在fragment里也是有oncreate方法可以被重写的,但这里我们要重写的是oncreateview,这点需要留意一下。

接着,我们做了视图一个填充,将制定的menufragment.axml填充进视图view中;这里的子页面视图menufragment.axml只是普通的界面布局。

这样,我们的子页面就做好了;下面需要做的就是到主页面里引用这个子页面。

引用fragment

在主页面的axml视图中,我们定义一个fragment,然后编写代码如下:

<fragment
    android:layout_height="fill_parent"
    android:layout_width="wrap_content"
    android:layout_weight="1"
    android:id="@+id/fragment_menu"
    android:name="kibaapp.menufragment" />

如上代码所示,我们可以看到,最后一行的代码稍微有点特别,我们来分析一下。

这行代码中的name属性的值是kibaapp.menufragment,我们会发现这个值根本就是一个完全限定名。

也就是说fragment标签是利用自身的name属性储存的完全限定名,然后用其来反射找到我们的子页面,然后显示。

理解了原理后,我们运行程序看下子页面的效果。

C#-Xamarin的Activity传值与Fragment引用

如图所示,我们成功引入了子页面。

activity之间传值

 android的页面之间传值是比较特别,它是使用intent的putextra方法来传值的。

而putextra方法是一个被重载的方法,如下图所示:

C#-Xamarin的Activity传值与Fragment引用

也就是说,putextra只能传图中给定类型的参数,想传自定义类型的参数是不可以的。

下面我们定义一个按钮点击事件,然后传递两个参数给新的页面。

button btnpara = this.findcontrol<button>("btnpara");
btnpara.click += (s, e) =>
{
    intent intent = new intent(this, typeof(paramactivity));
    intent.putextra("para1", "kiba518");
    intent.putextra("para2", 518);
    startactivity(intent);
};

如上述代码所示,我们向paramactivity传递了两个参数。

下面我们去paramactivity中接收这两个参数:

 protected override void oncreate(bundle savedinstancestate)
 {
     base.oncreate(savedinstancestate);
     setcontentview(resource.layout.paramactivity);
     string para1 =  this.intent.getstringextra("para1");
     int para2 = this.intent.getintextra("para2",-1);
     this.showtoast("para1:" + para1 + "===para2:" + para2);
 }

如上述代码所示,我们使用activity的属性intent的getstringextra方法接收了第一个参数,而接收第二个参数,我们使用了getintextra方法。

也就是说,在接收上个页面传来的数据时,我们需要根据数据类型,来调用该类型对应的接收方法,来接收数据。

参数传递界面如下图所示:

C#-Xamarin的Activity传值与Fragment引用

----------------------------------------------------------------------------------------------------

到此activity传值与fragment引用就介绍完了。

框架代码已经传到github上了,欢迎大家下载。

相关文章:

c#-xamarin利用zxing.net.mobile进行扫码

c#-xamarin的android项目开发(三)——发布、部署、打包

c#-xamarin的android项目开发(二)——控件应用

c#-xamarin的android项目开发(一)——创建项目

github地址:https://github.com/kiba518/kibaapp

----------------------------------------------------------------------------------------------------

注:此文章为原创,欢迎转载,请在文章页面明显位置给出此文链接!
若您觉得这篇文章还不错,请点击下方的推荐】,非常感谢!