⼤叔也说Xamarin~Android篇~Activity之间传递数组
我们在开发应⽤程序时,不可能只使⽤⼀个Layout或者⼀个Activity,⽐如你个管理系统,要求⽤户先登陆然后再使⽤,这时你⾄少要有两个activity吧,先登陆⼀个,然后成功后需要跳到别⼀个Activity,这就遇到了多个Activity之间传递数据的问题,这也是今天我们要说的!
◆先聊聊Activity
⾸先⼀个Activity都会去继承Activity类,这个类⾥有⽅法已经替我们实现,我们可以把activity看做是MVC⾥的Action,即它负责渲染我们的页⾯,组件页⾯上所需要的数据等,我们先来看看⼀个Activity在渲染页⾯时要经历的⼏个事件(⽅法),这些⽅法我们都可以在⾃定义的activity中去重写它!
onCreate:在这⾥创建界⾯,做⼀些数据的初始化⼯作;
onStart:到这⼀步变成“⽤户可见不可交互”的状态;
onResume:变成和⽤户可交互的,(在Activity栈系统通过栈的⽅式管理这些Activity,即当前Activity在栈的最上端,运⾏完弹出栈,则回到上⼀个Activity);
onPause:到这⼀步是可见但不可交互的,系统会停⽌动画等消耗CPU的事情。从上⽂的描述已经知道,
应该在这⾥保存你的⼀些数据,因为这个时候你的程序的优先级降 低,有可能被系统收回。在这⾥保存的数据,应该在onResume⾥读出来。
onStop:变得不可见,被下⼀个activity覆盖了
onDestroy:这是Activity被kill前最后⼀个被调⽤⽅法了,可能是其他类调⽤finish⽅法或者是系统为了节省空间将它暂时性的⼲掉,可以⽤isFinishing()来判断它,如果你有 ⼀个Progress Dialog在线程中运⾏,请在onDestroy⾥把他cancel掉,不然等线程结束的时候,调⽤Dialog的cancel⽅法会抛异常。
onPause,onstop, onDestroy,三种状态下 activity都有可能被系统kill 掉。
◆再说说Activity之间的数据传递
///<summary>
///点选item 后的事件
///</summary>
///<param name="sender"></param>
/
//<param name="e"></param>
void listView_ItemClick(object sender, AdapterView.ItemClickEventArgs e)
{
Toast.MakeText(this, "你选择了 " + datas[e.Position].Title, ToastLength.Short).Show();
Intent intent = new Intent(this, typeof(UserInfoLayoutActivity));
/* 通过Bundle对象存储需要传递的数据 */
Bundle bundle = new Bundle();
/*字符、字符串、布尔、字节数组、浮点数等等,都可以传*/
intent.PutExtra("Title", datas[e.Position].Title);
intent.PutExtra("Desc", datas[e.Position].Desc);
intent.PutExtra("AssistsCount", datas[e.Position].AssistsCount);
intent.PutExtra("Fails", datas[e.Position].Fails);
intent.PutExtra("Score", datas[e.Position].Score);
intent.PutExtra("Level", datas[e.Position].Level);
intent.PutExtra("Image", datas[e.Position].Image);
/*把bundle对象assign给Intent*/
intent.PutExtras(bundle);
StartActivity(intent);
}
上⾯代码是在某个项⽬被单击后所触发的事件,⽽在事件建⽴了Intent对象,它是跨Activty传值的基础,之后PutExtra为它们赋值,它相当于⼀个hash表,OK,下⾯我们再来看看第⼆页如何去接受这些数据
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.UserInfoLayout);//指定要去渲染的视图
var listView = FindViewById<ListView>(Resource.Id.userInfoViewMain);
listView.Adapter = new UserAdapter(this, new UserInfo
{
Title = Intent.GetStringExtra("Title"),
Desc = Intent.GetStringExtra("Desc"),asp 字符串转数组
AssistsCount = Intent.GetIntExtra("AssistsCount", 0),
Level = Intent.GetIntExtra("Level", 0),
Fails = Intent.GetIntExtra("Fails", 0),
Image = Intent.GetIntExtra("Image", 0),
Score = Intent.GetIntExtra("Score", 0),
});
}
代码中的OnCreate是每个Activity所具有的⽅法,即它是进⼊Activity后,第⼀个要执⾏的⽅法,这⾥⼀般是建⽴视图,初始化数据,加载PartialView,最后,我们看⼀下⼤叔的程序执⾏的最终效果。
第⼆个页⾯
呵呵,怎么样,挺有意思吧!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论