IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 最新的activityforresult使用以及activity的跳转 -> 正文阅读

[移动开发]最新的activityforresult使用以及activity的跳转

前言📢:
本篇文章实现的是1.实现对Activity生命周期的理解,使用log展示生命周期的状态变化;2.点击recycleview的的某一项点击后跳转到新的 activity1;3.实现最新的activityforresult功能,在activity1可收到activity2的回传值。

1. activity生命周期(主要还是理解,单独放出来)

我们来看一看activity生命周期,activity的生命周期有创建(oncreate)、启动(onstart)、暂停(onpause)、终止(stop)等。我们如何在as里面看到activity的生命周期呢?
重写activity的函数,在有关函数内添加Log.d()语句,在Logcat中使用筛选器,只查看Log.d的内容。
对应的代码如下(itemactivity和resultactivity实现的部分等下展示,先讲activity的生命周期):

	    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_item);
        Log.d("gcd","这是ItemActivity的oncreate");
    }
    
    @Override
    protected void onPause() {
        super.onPause();
        Log.d("gcd","这是ItemActivity的onpause");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.d("gcd","这是ItemActivity的onresume");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d("gcd","这是ItemActivity的onDestory");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d("gcd","这是Itemactivity的stop");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d("gcd","这是Itemactivity的restart");
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.d("gcd","这是Itemactivity的start");
    }

在这里插入图片描述
在这里插入图片描述
在运行成功后,使用activity的转跳,点击返回键,就可以观察到,activity的生命周期。这里我们可以发现,跳转过程中,itemactivity跳转到resultactivity时,itemactivity不会destory,而resultactivity跳转到itemactivity时,resultactivity会destory。这是为什么呢?——因为itemactivity是主页,resultactivity不是主页。
接下来,我们来分析核心代码。

2.实现步骤

2.1创建itemactivity.java并实现点击recycleview转跳

先实现点击recycleview的某一项点击后跳转到itemactivity。参考了:https://www.jianshu.com/p/c4cfe38a91ed的内容(进阶篇中的 “点击”)
这里用了第一个方法,在 Adapter 里面直接对控件做点击事件

        holder.textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(context,ItemActivity.class);
                intent.putExtra("age",18);
                context.startActivity(intent);

            }
        });
        holder.imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(context,ItemActivity.class);
                intent.putExtra("name","gcd");
                context.startActivity(intent);
            }
        });

这里使用startactivity可以实现直接转跳到ItemActivity不需要回传数据,点击微信朋友列表,进入朋友的界面。同时,在这个文件Adapter 下是无法直接使用startactivity来转跳的,需要使用context。

2.2编写itemactivity.java、新建编写resultactivity.java

下面是核心功能实现最新的activityforresult功能,在activity1(也就是itemactivity)上添加按钮可收到activity2(也就是resultactivity)的回传值。如:新闻详情页面中点击收藏按钮可显示当前的收藏数量为N。
activity_item.xml中添加一个button,两个textview,实现下图的UI布局。
在这里插入图片描述

在itemactivity.java中添加如下代码,这里解释一下参数,第一个,有一个类叫ActivityResultContract,这是一个抽象类,抽象类不能直接new对象,ActivityResultContracts才是实类;第二个参数,如果getResultCode返回一个925,则获取回传数据,将textview中的内容修改为result.getData().getStringExtra(“result”);

    public ActivityResultLauncher test = registerForActivityResult(
            new ActivityResultContracts.StartActivityForResult(),
            new ActivityResultCallback<ActivityResult>(){

                @Override
                public void onActivityResult(ActivityResult result) {
                    if (result.getResultCode() == 925){
                        Log.d("gcd","onActivityResultLauncher...");
                        textView.setText(result.getData().getStringExtra("result"));
                    }
                }
            });

我们是写一个方法函数,因为as之前的startActivityForResult现在不用了,
在这里插入图片描述现在要使用接口,这里可以按住CTRL键,击中想要看的函数。
这里我们查看registerForActivityResult,

@Override
public final <I, O> ActivityResultLauncher<I> registerForActivityResult(
        @NonNull ActivityResultContract<I, O> contract,
        @NonNull ActivityResultCallback<O> callback) {
    return registerForActivityResult(contract, mActivityResultRegistry, callback);
}

按照提词器的提示将代码补全就行。
在编写button点击事件,这里解释一下

        button.setOnClickListener(new View.OnClickListener() {
        //这里实现跳转
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(ItemActivity.this,resultActivity.class);
                test.launch(intent);
            }
        });

intent是干嘛的呢?消息传递,在这里就是完成activity之间的消息传递。test.launch()启动intent(ItemActivity与resultActivity之间的消息传递)。
在resultActivity.java中添加如下代码,

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_result);

        Log.d("gcd","这是activity_result的oncreate");

        Intent intent=getIntent();
        intent.putExtra("result","这里是郭成都。" + "查看了朋友的详细信息\n"
                + "时间是:" + Calendar.getInstance().getTime());
        setResult(925,intent);
    }

intent.putExtra()函数第一个参数为键名,第二个参数为键对应的值,值是真正要传递的数据。数据传递给itemActivity,itemActivity怎么获取这个数据(键值对)呢?用get×××Extra()方法,“×××”是数值类型。比如上例中的键值对(“result”,“这里是郭成都。” + “查看了朋友的详细信息\n”+ “时间是:” + Calendar.getInstance().getTime
()),数据类型是String,那么获取这组数据的方法就是getStringExtra();看itemactivity里面,textView.setText(result.getData().getStringExtra(“result”));
setResult(925,intent)对应if (result.getResultCode() == 925);值为925传回数据。

3.运行截图展示

点击微信;
在这里插入图片描述
点击列表中的任意一项
在这里插入图片描述
点击“朋友信息”
在这里插入图片描述
点击上面的返回(back)
在这里插入图片描述
查看生命周期的Log.d()
在这里插入图片描述

4.源码仓库地址

到这里就写完啦,下面给出源码仓库地址。
链接: link

参考了:https://www.jianshu.com/p/c4cfe38a91ed的内容(进阶篇中的 “点击”)——大家可以去看这个文章(源码好像点不开但是文章写得很好),可以顺便给这个文章点个赞(老师说对作者有用)。

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-10-22 21:26:57  更:2022-10-22 21:27:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 5:27:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码