Activity的生命周期与跳转

  这次实验主要是理解Activity,实现:新建一个新的activity1,recycleview的某一项点击后跳转到这个新的activity1。如:点击新闻列表会跳转到新闻详情页面;实现最新的activityforresult功能,具体要求如下:新建一个新的activity2,在activity1上添加按钮可收到activity2的回传值。如:新闻详情页面中点击收藏按钮可显示当前的收藏数量为N。

  这次试验我还是在之前的项目上搭建的,并且这次更新也push到了这个仓库:https://github.com/DobyAsa/RechatV2.git

 

  这一次我新建了两个activity,一个是当用户点击列表中的item之后跳转的ItemActivity,在这个activity中,我们将用来显示将来会拿到的数据。另一个是专门用来返回数据的工具activity,这个activity负责返回上一个activity所需要的数据。

 

  其中ItemActivity的布局为:

复制代码
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     xmlns:app="http://schemas.android.com/apk/res-auto"
 4     xmlns:tools="http://schemas.android.com/tools"
 5     android:layout_width="match_parent"
 6     android:layout_height="match_parent"
 7     tools:context=".ItemAcitivity">
 8 
 9     <Button
10         android:id="@+id/infoButton"
11         android:layout_width="wrap_content"
12         android:layout_height="wrap_content"
13         android:text="@string/info_button"
14         app:layout_constraintBottom_toBottomOf="parent"
15         app:layout_constraintEnd_toEndOf="parent"
16         app:layout_constraintStart_toStartOf="parent"
17         app:layout_constraintTop_toTopOf="parent"
18         app:layout_constraintVertical_bias="0.53" />
19 
20     <TextView
21         android:id="@+id/infoView"
22         android:layout_width="wrap_content"
23         android:layout_height="wrap_content"
24         android:paddingLeft="32dp"
25         android:paddingEnd="32dp"
26         app:layout_constraintBottom_toTopOf="@+id/infoButton"
27         app:layout_constraintEnd_toEndOf="parent"
28         app:layout_constraintStart_toStartOf="parent"
29         app:layout_constraintTop_toTopOf="parent" />
30 </androidx.constraintlayout.widget.ConstraintLayout>
复制代码

  

 

  相应的,我的Activity的代码为:

复制代码
 1 package com.example.rechatv2;
 2 
 3 import androidx.activity.result.ActivityResult;
 4 import androidx.activity.result.ActivityResultCallback;
 5 import androidx.activity.result.ActivityResultLauncher;
 6 import androidx.activity.result.contract.ActivityResultContracts;
 7 import androidx.appcompat.app.AppCompatActivity;
 8 
 9 import android.content.ClipData;
10 import android.content.Intent;
11 import android.os.Bundle;
12 import android.util.Log;
13 import android.view.View;
14 import android.widget.Button;
15 import android.widget.TextView;
16 
17 public class ItemAcitivity extends AppCompatActivity {
18     private Button mInfoButton;
19     private TextView mInfoView;
20 
21     @Override
22     protected void onCreate(Bundle savedInstanceState) {
23         super.onCreate(savedInstanceState);
24         setContentView(R.layout.activity_item);
25 
26         mInfoButton = findViewById(R.id.infoButton);
27         mInfoView = findViewById(R.id.infoView);
28 
29         mInfoButton.setOnClickListener(new View.OnClickListener() {
30             @Override
31             public void onClick(View view) {
32                 Intent intent = new Intent(ItemAcitivity.this, ResultActivity.class);
33                 test.launch(intent);
34             }
35         });
36     }
37     public ActivityResultLauncher test;
38     {
39         test = registerForActivityResult(
40                 new ActivityResultContracts.StartActivityForResult(),
41                 new ActivityResultCallback<ActivityResult>() {
42 
43                     @Override
44                     public void onActivityResult(ActivityResult result) {
45                         if(result.getResultCode() == 1024){
46                             Log.d("xr", "onActivityResultLauncher...");
47                             mInfoView.setText(result.getData().getStringExtra("Info"));
48                         }
49                     }
50                 });
51     }
52 }
复制代码

   我的ResultActivity的布局是空的,因为在这次实验中其实也用不到他。主要是用代码

复制代码
package com.example.rechatv2;

import androidx.appcompat.app.AppCompatActivity;

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

import java.util.Calendar;

public class ResultActivity extends AppCompatActivity {

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

        Intent intent = getIntent();
        intent.putExtra("Info", "现在我在写实验,我的老师是肖蓉。"+"现在时间是: "+ Calendar.getInstance().getTime());
        setResult(1024, intent);
        finish();
    }
}
复制代码

  然后我们也要给每个item都加上一个点击事件:

复制代码
    public void onBindViewHolder(@NonNull ChatViewHolder holder, int position) {
        holder.getChatAvatar().setImageDrawable(localDataset[0].getAvatar());
        holder.getChatName().setText(localDataset[0].getName());
        holder.getLastChatTime().setText(localDataset[0].getLastChatTime());
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(context, ItemAcitivity.class);
                context.startActivity(intent);
            }
        });
    }
复制代码

  OK,到现在为止,我们的功能已经实现完成。下图是演示,“曾浩”是我的一个同学,OK,我们点击他。

  我们就进入到ItemActivity的界面。继续点击get information

 

 

 

 完成。

 

posted @   DobyAsa  阅读(90)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示