Activity生命周期

作业要求:新建一个新的activity1,recycleview的某一项点击后跳转到这个新的activity1。如:点击新闻列表会跳转到新闻详情页面;
在上次作业的基础上添加点击跳转查看详情的功能

参考: https://www.jianshu.com/p/c4cfe38a91ed

在adapter.java文件的onBindViewHolder中直接对控件做点击事件

@Override
public void onBindViewHolder(@NonNull XxxViewHolder holder, int position) {
    holder.控件名.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // TODO:
        }
    });
}

如下

@Override
    public void onBindViewHolder(myviewholder myviewholder, int j)
    {
        myviewholder.textView.setOnClickListener(new View.OnClickListener() //直接在adapter里写某个控件的监听
        {
            @Override
            public void onClick(View view)
            {
                //不能写StartActivityForResult,因为在fragment下写StartActivityForResult是需要一个返回值,此时当前页面不动
                //可是当前页面是recycleview必须要跳转到其他activity上
                //startactivity启动必须是在context环境下
                Intent intent = new Intent(context,ItemActivity.class);
                context.startActivity(intent);
                //现在点击跳转到itemactivity详情界面,接下来要查看课程信息


            }
        });
    }

接下来新建一个activity,命名itemactivity,作为点击跳转到的详情界面,如图
在这里插入图片描述

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

        button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
            }
        });
    }

写完setOnClickListener后需要写launcher

public ActivityResultLauncher test;

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

                    @Override
                    public void onActivityResult(ActivityResult result) {
                        if (result.getResultCode() == 888) {
                            Log.d("xr", "onActivityResultLauncher...");
                            textView.setText(result.getData().getStringExtra("data"));
                        }
                    }
                });
    }
    //因为launcher是一个function,不要放到了onCreate里面!!

再在onClick里面写test.lauch

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

        textView=findViewById(R.id.ItemtextView2);

        button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
            Intent intent = new Intent(ItemActivity.this,ResultActivity2.class);
                test.launch(intent);
            }
        });
    }

注意点是
在这里插入图片描述
这个地方要记得写,不然之后点击的时候是没有返回值的。一开始忘记了写这里,点击就没有反应,收不到返回值
test.launch需要一个intent,在其前面写一个intent,在itemactivity环境下跳到结果值,此时创建一个新的activity命名为ResultActivity。
因为result只用传返回值,所以不用管xml文件。

ResultActivity中首先有一个intent用来接收ItemActivity发过来的intent,ResultActivity中的intent放值
在这里插入图片描述
插入时间用calendar
之后setresult,先是收到item传来的intent,再将result中的intent中的数据传回去
在这里插入图片描述
在这里插入图片描述
注意这两个地方的数字要一样
最后一定加上finish,表示整个activity结束

public class ResultActivity2 extends AppCompatActivity {
//是返回页面,写button的点击事件
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_result2);

        Intent intent=getIntent();
        intent.putExtra("data","课程:安卓\n"+"老师:肖蓉。\n"+
                "上课时间是:\n"+ Calendar.getInstance().getTime());
        setResult(2,intent);
        finish();
    }
}

总体代码
ItemActivity

package com.example.work2;

import androidx.activity.result.ActivityResult;
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class ItemActivity extends AppCompatActivity {

    private Button button;
    private TextView textView;

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

        textView=findViewById(R.id.ItemtextView2);

        button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(ItemActivity.this,ResultActivity2.class);
                test.launch(intent);
            }
        });


    }

    public ActivityResultLauncher test;

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

                    @Override
                    public void onActivityResult(ActivityResult result) {
                        if (result.getResultCode() == 2) {
                            Log.d("xr", "onActivityResultLauncher...");
                            textView.setText(result.getData().getStringExtra("data"));
                        }
                    }
                });
    }
    //因为launcher是一个function,不要放到了onCreate里面!!
}

ResultActivity

package com.example.work2;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.widget.Button;

import java.util.Calendar;

//作为传值的界面,得到的是返回值
//是给itemactivity的返回值,不需要跳转,因此不需要管xml文件
public class ResultActivity2 extends AppCompatActivity {
//是返回页面,写button的点击事件


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

        Intent intent=getIntent();
        intent.putExtra("data","课程:安卓\n"+"老师:肖蓉。\n"+
                "上课时间是:\n"+ Calendar.getInstance().getTime());
        setResult(2,intent);
        finish();
    }
}

gitee地址: https://gitee.com/chenrrr/activity-lifecycle.git

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值