95992828九五至尊2

Activity之间传递数组

二月 6th, 2019  |  882828九五至尊手机版

回去目录

http://www.cnblogs.com/lyp3314/archive/2011/11/10/2244971.html

俺们在付出应用程序时,不可以只行使一个Layout或者一个Activity,比如你个管理连串,要求用户先登陆然后再利用,这时你至少要有多个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
是用户接口程序,原则上它会提须要用户一个交互式的接口功效。它是 android
应用程序的基本作用单元。Activity
本身是从未有过界面的。所以activity类创设了一个窗口,开发人员可以透过setContentView(View)接口把UI放到activity创立的窗口上,当activity指向全屏窗口时,也足以用其余措施已毕:作为漂浮窗口(通过windowIsFloating的主题联谊),或者放置到其它的activity(使用ActivityGroup)。activity是单身的,用于拍卖用户操作。大致拥有的activity都要和用户打交道,

再说说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"),
                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,最终,大家看一下大爷的程序执行的末梢效果。

882828九五至尊手机版 1

第四个页面

882828九五至尊手机版 2

呵呵,怎样,挺好玩吗!

 回去目录

二、activity生命周期

  

882828九五至尊手机版 3

882828九五至尊手机版 4View Code 

由图可见:

  在一个Activity正常启动进度中,那几个方式调用的次第是onCreate ->
onStart -> onResume;在Activity被kill掉的时候方法顺序是onPause ->
onStop ->
onDestroy,此为一个完好无损的Lifecycle。那么对于中断处理(比如电话来了),则是onPause
-> onStop,恢复时onStart ->
onResume;倘诺当前应用程序的是一个Theme为Translucent(半晶莹剔透)
或者Dialog 的Activity那么中断就是onPause ,恢复生机的时候onResume。

  那么对于”Other app need
memory”,就是我们手机在运行一个应用程序的时候,有可能打进去电话发进来短信,或者尚未电了,那时候程序都会被搁浅,优先去服务电话的基本功效,此外系统也不相同意你占用太多资源,至少要保管一些成效(比如电话),所以资源不足的时候也就有可能被kill掉。

办法在系统中的成效及我们相应做哪些:

  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之间的通讯

  在 Android 中,不相同的 Activity
实例可能运行在一个经过中,也恐怕运行在不一致的进度中。因而大家须要一种特其他体制支持我们在
Activity 之间传递新闻。Android 中通过 Intent 对象来表示一条音讯,一个
Intent 对象不仅涵盖有其一音讯的目的地,仍是可以分包音信的情节,那好比一封
Email,其中不仅应该包括收件地方,还是能够分包具体的情节。对于一个 Intent
对象,音信“目标地”是必须的,而内容则是可选项。

  Intent负责对操作的动作、动作涉及数额、附加数据举办描述,Android则基于此Intent的叙说,负责找到呼应的组件,将
Intent传递给调用的零部件,并做到组件的调用。因而,Intent在那边起着一个媒体中介的效果,专门提供组件互相调用的有关音信,已毕调用者与被调用者之间的解耦。

  在动用中,大家可以以三种样式来采纳Intent:

  直接Intent:指定了component属性的Intent(调用setComponent(ComponentName)或者setClass(Context,
Class)来指定)。通过点名具体的组件类,通告应用启动相应的零件。

  直接Intent:没有点名comonent属性的Intent。这几个Intent需求包涵充足的消息,这样系统才能按照那一个新闻,在在所有的可用组件中,确定满足此Intent的机件。
      对于直接Intent,Android不须要去做分析,因为目的组件已经很明确。

  Android必要分析的是那多少个直接Intent,通过分析,将
Intent映射给可以拍卖此Intent的Activity、IntentReceiver或Service。Intent解析机制至关重即使因而寻找已登记在AndroidManifest.xml中的所有IntentFilter及中间定义的Intent,最后找到匹配的Intent。

四、Activity 的 Intent
Filter

  Intent Filter 描述了一个组件愿意接受什么样的 Intent 对象,Android
将其抽象为 android.content.IntentFilter 类。在 Android 的
AndroidManifest.xml 配置文件中可以通过 882828九五至尊手机版,<intent-filter
>
节点为一个 Activity 指定其 Intent Filter,以便告诉系统该 Activity
可以响应什么品种的 Intent。

  当使用 startActivity(intent) 来启动其它一个 Activity
时,如若直白指定 intent 对象的 Component 属性,那么 Activity Manager
将准备启动其 Component 属性指定的 Activity。否则 Android 将经过 Intent
的其他性质从安装在系统中的所有 Activity
中寻找与之最匹配的一个起步,如若没有找到适当的
Activity,应用程序会取得一个系统抛出的不得了。这么些匹配的历程如下:

882828九五至尊手机版 5

五、Activity的栈式管理

  Android针对Activity的管理选取的是栈,就是说某一个每一日唯有一个Activity处在栈顶,当那么些Activity被灭绝后,下边的Activity才有可能浮到栈顶,或者有一个新的Activity被创建出来,则旧的Activity就被压栈沉下去了。Activity是Android程序的展现层。程序的每一个显示屏幕就是一个Activity。正在运行的Activity处在栈的最顶端,它是运行状态的。

                                     
 882828九五至尊手机版 6

当在程序中调用 Activity.finish()方法时,结果和用户按下 BACK
键一样:它告诉 Activity Manager该Activity实例可以被“回收”。随后 Activity
Manager 激活处于栈第二层的 Activity ,把原 Activity 压入到栈的第二层,从
Running 状态转到 Paused 状态。

六、Activity的加载情势

standard、singleTop、singleTask、singleInstance(其中前几个是一组、后八个是一组),默许为standard 

standard:就是intent将发送给新的实例,所以每一次跳转都会变动新的activity。

singleTop:也是殡葬新的实例,但分化standard的某些是,在伸手的Activity正好位于栈顶时(配置成singleTop的Activity),不会社团新的实例

singleTask:和前面的singleInstance都只创设一个实例,当intent到来,须求创立设置为singleTask的Activity的时候,系统会检查栈里面是还是不是早已有该Activity的实例。假如有直接将intent发送给它。

singleInstance:

先是说圣元(Synutra)下task这么些概念,Task可以认为是一个栈,可放入四个Activity。比如启动一个使用,那么Android就创造了一个Task,然后启动这几个利用的入口Activity,那在它的界面上调用任何的Activity也只是在这么些task里面。那假若在多个task中共享一个Activity的话如何是好吧。举个例来说,若是打开一个导游服务类的应用程序,里面有个Activity是开启GOOGLE地图的,当按下home键退回到主菜单又开动GOOGLE地图的使用时,突显的就是刚刚的地形图,实际上是同一个Activity,实际上那就引入了singleInstance。singleInstance格局就是将该Activity单独放入一个栈中,那样那些栈中唯有那么些Activity,分歧应用的intent都由这么些Activity接收和突显,这样就形成了共享。当然前提是那一个应用都未曾被销毁,所以刚刚是按下的HOME键,假使按下了再次来到键,则不算。

七、Activity的跳转

Activity跳转,无返回结果

  
那是最简单易行的Activity跳转格局。从一个Activity启动另一个Activity,直接startActivity(new
Intent(当前Activity.this, 下一Activity.class))。

Activity跳转,返回数据/结果

   需要再次来到数据或结果的,则运用startActivityForResult (Intent intent,
int
requestCode),requestCode的值是自定义的,用于识别跳转的目的Activity。跳转的目的Activity所要做的就是重返数据/结果,setResult(int
resultCode)只回去结果不带多少,或者setResult(int resultCode, Intent
data)两者都回去!而接受再次来到的数额/结果的处理函数是onActivityResult(int
requestCode, int resultCode, Intent
data),那里的requestCode就是startActivityForResult的requestCode,resultCode就是setResult里面的resultCode,重临的数据在data里面。

  **
注意,在setResult后,要调用finish()销毁当前的Activity,否则不能够再次来到到原来的Activity,就不可能执行原来Activity的onActivityResult函数,看到眼前的Activity没影响。

  本人是个新手,没什么经验,如觉察有错误或者怎么着好的指出,欢迎指正!请多多指教!

相关文章

Your Comments

近期评论

    功能


    网站地图xml地图