AS移动开发 类微信界面2_Activity的生命周期与跳转(持续更新中)

Android Studio移动开发 类微信界面 2022新版!

第一节 框架初步搭建


一、 功能说明

1、请根据课程内容实现对Activity生命周期的理解,使用log展示生命周期的状态变化;
2、根据博客:https://www.jianshu.com/p/c4cfe38a91ed的内容(进阶篇中的 “点击”),在前次作业的基础上增加列表项的单项点击功能,具体要求是:新建一个新的activity1,recycleview的某一项点击后跳转到这个新的activity1。如:点击新闻列表会跳转到新闻详情页面;
3、实现最新的activityforresult功能,具体要求如下:实现最新的activityforresult功能,具体要求如下:新建一个新的itemactivity,在itemactivity上添加按钮可收到resultactivity的回传值。如:新闻详情页面中点击收藏按钮可显示当前的收藏数量为N。

二、代码解析

两个效果共用了一个代码仓库,实现不同效果只需修改AndroidManifest.xml中的具体activity值

(1) activity生命周期

效果展示:

fanhui

具体代码如下:
AndroidManifest.xml
activity3和activity4实现
在这里插入图片描述
activity的生命周期的打印:

    @Override
    protected void onStart() {
        super.onStart();
        Log.d("xmy","这是A3的生命周期:onStart。。。");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.d("xmy","这是A3的生命周期:onPause。。。");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.d("xmy","这是A3的生命周期:onResume。。。");
    }


    @Override
    protected void onPostResume() {
        super.onPostResume();
        Log.d("xmy","这是A3的生命周期:onPostResume。。。");
    } // 主要保留用于在任何子类完成恢复后想要完成某种设置的系统操作.



    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d("xmy","这是A3的生命周期:onRestart。。。");
    }


    @Override
    protected void onStop() {
        super.onStop();
        Log.d("xmy","这是A3的生命周期:onStop。。。");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d("xmy","这是A3的生命周期:onDestroy。。。");
    }

activity3到activity4的跳转

MainActivity3.java的关键代码

实现activity3向activity提供信息 intent.putExtra(“name”,“xmy”);
用launcher启动

ublic class MainActivity3 extends AppCompatActivity {
    private Button button;
    private TextView textView;

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

        Log.d("xmy","这是A3的生命周期:onCreate。。。");



        //Context context=this;
        button=findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(MainActivity3.this,MainActivity4.class);//intent传值 string action??uri资源
                intent.putExtra("name","xmy");

//                startActivityForResult(intent,1);
                test.launch(intent);

            }
        });}
      //更新2022/10/12  函数启动的封包  launcher启动器   复杂函数的调用方法
      public ActivityResultLauncher test= registerForActivityResult(
              //new ActivityResultContract,  是抽象类没办法用
              new ActivityResultContracts.StartActivityForResult(),
              new ActivityResultCallback<ActivityResult>() {
                  @Override
                  public void onActivityResult(ActivityResult result) {
                      if(result.getResultCode()==2){

                          Log.d("xmy","onActivityResult有返回值");
                          textView=findViewById(R.id.textView9);
                          textView.setText(result.getData().getStringExtra("result"));
            }
                  }
              });

MainActivity4.java的关键代码

activity4收到activity提供的信息并返回值

public class MainActivity4 extends AppCompatActivity {
//    private Button buttom;
    private TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main4);

        Intent intent4=getIntent();//收到3
        String str1=intent4.getStringExtra("name");

        intent4.putExtra("result",str1+"年龄是20");
        setResult(2,intent4);  //intent string value ,key为  resultcode用来区分该返回的结果是来自于哪一个请求码

        TextView textView=findViewById(R.id.textView8);
        Log.d("xmy","这是A4的生命周期:onCreate。。。");
    }

(2) activity跳转

效果展示:

tiaozhuan

具体代码如下:
AndroidManifest.xml
Mainactivity,ItemActivity和resultActivity实现
在这里插入图片描述

itemactivity对应的xml文件activity_item作为返回页面,layout布局如下:
请添加图片描述

itemActivity.java关键代码

实现最新的activityforresult功能,具体要求如下:新建一个新的itemactivity,在itemactivity上添加按钮可收到resultactivity的回传值

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

        textView=findViewById(R.id.itemtextview2);

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

    public ActivityResultLauncher test =registerForActivityResult(
            new ActivityResultContracts.StartActivityForResult(),
            new ActivityResultCallback<ActivityResult>() {
                @Override
                public void onActivityResult(ActivityResult result) {
                    if (result.getResultCode() == 666) {
                        Log.d("xmy","onActivityResultLauncher...");
                        textView.setText(result.getData().getStringExtra("data"));
                    }
                }
            });

resultActivity.java关键代码

//用来回值
public class resultActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_result);
        Intent intent=getIntent();
        intent.putExtra("data","联系人详情信息 id:circle sex:w vx号:123456\n,您查看的时间是"
                +Calendar.getInstance().getTime());

        setResult(666,intent);
        finish();
    }
}

三、问题及解决

1.遇到虚拟机打开后闪退的问题:
程序没有报错却没有办法运行的情况往往是最难搞的,但是凭经验来看,很大可能性就是因为R.id.xxx找控件时出现找错的问题

2.recyclerview的具体完善以及回传值的细化正在改进中

四、源码仓库地址

https://gitee.com/elcric-i/2022-2023

五、补充资料

activity生命周期

写在最后:作者处于初学阶段,本文只用于记述学习内容和浅显理解,如果读者发现任何问题,还请不吝赐教,多多评论指出或者私信 谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值