最新的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的内容(进阶篇中的 “点击”)——大家可以去看这个文章(源码好像点不开但是文章写得很好),可以顺便给这个文章点个赞(老师说对作者有用)。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值