C#-Xamarin的Activity传值与Fragment引用
前言
我们学习任何一个新框架时,肯定都需要学习它的子页面用法,因为子页面是封装公共内容最好的容器。
在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属性储存的完全限定名,然后用其来反射找到我们的子页面,然后显示。
理解了原理后,我们运行程序看下子页面的效果。
如图所示,我们成功引入了子页面。
Activity之间传值
Android的页面之间传值是比较特别,它是使用Intent的PutExtra方法来传值的。
而PutExtra方法是一个被重载的方法,如下图所示:
也就是说,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方法。
也就是说,在接收上个页面传来的数据时,我们需要根据数据类型,来调用该类型对应的接收方法,来接收数据。
参数传递界面如下图所示:
----------------------------------------------------------------------------------------------------
到此Activity传值与Fragment引用就介绍完了。
框架代码已经传到Github上了,欢迎大家下载。
相关文章:
C#-Xamarin利用ZXing.Net.Mobile进行扫码
C#-Xamarin的Android项目开发(三)——发布、部署、打包
C#-Xamarin的Android项目开发(二)——控件应用
C#-Xamarin的Android项目开发(一)——创建项目
Github地址:https://github.com/kiba518/KibaApp
----------------------------------------------------------------------------------------------------
注:此文章为原创,任何形式的转载都请联系作者获得授权并注明出处!
若您觉得这篇文章还不错,请点击下方的【推荐】,非常感谢!
C#-Xamarin的Activity传值与Fragment引用的更多相关文章
- Activity往另外一个Activity传值,Fragment获取另外一个Activity里面的值。
在oneActivity中实现跳转到MainActivity //intent 用来跳转另外一个MainActivity,bundle传值到MainActivity Intent Ma ...
- activity传值到fragment
1,初始化fragment时候: @Override public void onAttach(Activity activity) { /** 注册广播 */ initBroadcast(); s ...
- 【Android】安卓开发之activity如何传值到fragment,activity与fragment传值
作者:程序员小冰,GitHub主页:https://github.com/QQ986945193 新浪微博:http://weibo.com/mcxiaobing 大家知道,我们利用activity使 ...
- java集合中的传值和传引用
在学习java集合过程中发现了传值和传引用的区别: 我们来看下面两句话 ●java集合就像一种容器,我们可以把多个对象(实际上是对象的引用),丢进该容器.(来自疯狂java讲义) ●当使用Iterat ...
- Go语言的传值与传引用
Go语言里的传值与传引用大致与C语言中一致,但有2个特例,map和channel默认传引用,也就是说可以直接修改传入的参数,其他的情况如果不用指针的话,传入的都是参数的副本,在函数中修改不会改变调用者 ...
- java中的传值与传引用
java函数中的传值和传引用问题一直是个比较“邪门”的问题,其实java函数中的参数都是传递值的,所不同的是对于基本数据类型传递的是参数的一份拷贝,对于类类型传递的是该类参数的引用的拷贝,当在函数体中 ...
- Xamarin.Forms项目无法添加服务引用
Xamarin.Forms项目无法添加服务引用 创建的Xamarin.Forms项目中,右击“引用”选项,在弹出的菜单中没有“添加服务引用”命令.这是由于该项目是支持Windows Phone 8.1 ...
- python函数传参是传值还是传引用?
首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传 ...
- java 函数形参传值和传引用的区别
java方法中传值和传引用的问题是个基本问题,但是也有很多人一时弄不清. (一)基本数据类型:传值,方法不会改变实参的值. public class TestFun { public static v ...
随机推荐
- 并查集(union-find set)与Kruskal算法
并查集 并查集处理的是集合之间的关系,即‘union' , 'find' .在这种数据类型中,N个不同元素被分成若干个组,每组是一个集合,这种集合叫做分离集合.并查集支持查找一个元素所属的集合和两个元 ...
- HTML标签fieldset
一个不常用的HTML标签fieldset,不过我觉得比较有意思,其语法如下: <fieldset> <legend>fieldset名称</legend> < ...
- ubuntu18.04安装安装JDK
1.前提准备: 下载JDK:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 2. ...
- spring和hibernate整合之---java.lang.ClassNotFoundException: javax.el.ELManager 大坑
今天整合spring和hibernate, 本着使用最高版本的原则, 使用了hibernate-validator 6.0.1.Final, tomcat是7.0.56, 启动时出现如下错误. 经过 ...
- Unix系统的常用信号
编号为1 ~ 31的信号为传统UNIX支持的信号,是不可靠信号(非实时的),编号为32 ~ 63的信号是后来扩充的,称做可靠信号(实时信号).不可靠信号和可靠信号的区别在于前者不支持排队,可能会造成信 ...
- USB/GPIO/SDIO
通用串行总线(英语:Universal Serial Bus,缩写:USB)是连接计算机系统与外部设备的一种串口总线标准,也是一种输入输出接口的技术规范.它只有4根线,两个电源(5V,地线),两个数据 ...
- spring-boot-starter-druid
i have found from the document, and seems that spring-boot only support tomcat-jdbc,HikariCP and DBC ...
- AJAX from S3 CORS fails on preflight OPTIONS with 403
解决办法: 将 <!-- Sample policy --> <CORSConfiguration> <CORSRule> <AllowedOrigin> ...
- 23.app后端如何架设文件系统
现在app展现内容的形式多种多样的,有文字,图片,声音,视频等等,其中文件占了一个很大的比重.随着app不断运营,文件会越来越多,占用的磁盘空间也不断增大,架设一套高效的文件系统,对于整个app架构有 ...
- python:解析js中常见的 不带引号的key的 json
首先要明晰一点,json标准中,key是必须要带引号的,所以标准json模块解析不带引号的key的 json就会抛错 不过有一些lib可以帮我们解析 如:demjson(链接) >>> ...