Activity的生命周期与跳转
一、设计目标
1、请根据课程内容实现对Activity生命周期的理解,使用log展示生命周期的状态变化;
2、根据博客:https://www.jianshu.com/p/c4cfe38a91ed的内容(进阶篇中的 “点击”),在前次作业的基础上增加列表项的单项点 击功能,具体要求是:新建一个新的activity1,recycleview的某一项点击后跳转到这个新的activity1。如:点击新闻列表会跳转到新 闻详情页面;
3、实现最新的activityforresult功能,具体要求如下:新建一个新的activity2,在activity1上添加按钮可收到activity2的回传值。 如:新闻详情页面中点击收藏按钮可显示当前的收藏数量为N。
二、功能说明
1、重写了MainActivity的各个生命周期调用方法,并使用log进行日志打印来展示生命周期的状态变化。
2、在已有的瀑布流recycleview基础上,增加了点击其中任意一项(图片或文字)即可跳转到新的风景详情界面。
3、使用activityforresut功能实现了在风景详情界面进行点赞,可以获取到另一个ResultActivity所返回的点赞感谢消息。
三、代码解析
1.生命周期的变化,代码如下
可以看到当activity进入各个生命周期时会调用对应的方法,比如在创建时调用onCreate(),而在销毁时则调用onDestroy。我们仅仅只需要对它们进行重写即可,并在其内部通过Log打印日志。具体状态转变流程如下:
当Activity启动或从其它Activity跳转到本Activity时,会依次调用本Activity的onCreate、onStart和onResume方法,进入运行状态。
当点击安卓虚拟机的主页面键或跳转到其它Activity时,当前Activity会调用onPause和onStop,停止运行。
当点击安卓虚拟机的回退键后,除了调用onPause和onStop停止Activity外,还会调用onDestroy方法销毁当前Activity。
2.增加recycleView列表项的单项点击功能
首先为此前自定义的适配器MyAdapter中的类RecommendViewHolder中添加一个LinearLayout属性,并在代码78行将它赋值为recycleView中的一个列表项
然后再在onBindViewHolder中通过setOnClickListener为它设置点击事件,代码的56、57两行即为具体事,通过创建了一个Intent显式的启动指定的Activity,即跳转到风景详情界面(UI代码较为简单,故不再展示),同时,intent对象也可进行不同Activity间的通信。
3.使用activityforresut功能实现风景详情界面ItemActivity的相关操作
首先定义了一个按钮btn_getInfo,并设置了它的点击事件,即点赞操作。为了启动一个新页面并从中获取它的回传值,我们需要一个ActivityResultLauncher类的对象,再通过调用它的launch方法并传入一个intent类的对象即可实现该功能。
风景详情页面相关代码:
ActivityResultLauncher类对象可通过registerForActivityResult获取。该方法需要传入两个参数。由于两个参数分别为一个抽象类和一个接口,故我们需要传入对应的实现类。前者我们只需调用对应抽象类中的StartActivityForResult即可获取,而后者则通过匿名内部类实现ActivityResultCallback接口,并重写它的onActivityResult,该方法中定义了获得回传值并返回当前Activity后的逻辑。具体如下:
36行通过返回码判断是否正常返回,如果返回码是200,则进行后续操作。37行通过getData方法获取新页面返回后回传的intent,38、39行将intent中的数据取出并设置到textView上。
用于获取数据的新页面相关代码(该Activity仅用于回传数据,不要用对UI界面进行配置):
代码18~20行获取到传入的intent对象并向其中存入数据用于回传,并设置返回码为200,代表设置成功。21行调用finish方法结束当前Activity,并返回ItemActivity页面。
四、运行展示截图
1.生命周期状态变化
2.列表项跳转以及值的回传