目录
设计目标
在上一个微信页面设计的代码的基础上完成以下内容(由于上次我写的代码与老师讲的不同所以这次用的微信界面代码是老师发的代码)
功能说明
新增了ItemActivity和ResultActivity以及对应的activity_item.xml和activity_result.xml文件用来完成所需功能。recycleview的某一项点击后跳转到这个新的ItemActivity所对应的界面,在activity_item.xml上添加按钮可收到ResultActivity所对应的回传值
代码解析
Activity的跳转
首先是修改Adapter里的onBindViewHolder里的代码用于点击列表里的内容并进行跳转。Intent 是一个消息传递对象,使用它可以向其他Android组件请求操作。使用Intent来实现跳转的信息传递,又由于是动态跳转运用了context来实现activity的启动
Adapter里的onBindViewHolder里的代码
@Override
public void onBindViewHolder(myviewholder myviewholder, int j) {
myviewholder.textView.setText(list.get(j));
myviewholder.textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent(context,ItemActivity.class);
context.startActivity(intent);
}
});
}
然后添加 ItemActivity用于实现跳转之后的界面的设计,在activity_item.xml里添加了一个按钮用于后面的点击操作,一个TextView用于描述界面内容,一个用于之后的接受返回信息。
然后在ItemActivity中在button的setOnClickListener里运用Intent和launch来完成将ResultActivity里的信息回传到TextView中。在ActivityResultLauncher定义了code=888和textView.setText(result.getData().getStringExtra("data"))的data用于之后和ResultActivity进行回传的确认。
activity_item.xml代码
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ItemActivity">
<TextView
android:id="@+id/textView6"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="32dp"
android:layout_marginEnd="32dp"
android:text="这是返回的信息"
android:textSize="30sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.589" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="作业完成情况"
android:textSize="30sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView"
app:layout_constraintVertical_bias="0.094" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="这是详情页面"
android:textSize="30sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.212" />
</androidx.constraintlayout.widget.ConstraintLayout>
ItemActivity代码
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);
Log.d("zty","这是Activity生命周期的创建onCreate");
button=findViewById(R.id.button);
textView=findViewById(R.id.textView6);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent(ItemActivity.this,ResultActivity.class);
test.launch(intent);
}
});
}
@Override
protected void onStart() {
super.onStart();
Log.d("zty","这是ItemActivity的启动onStart");
}
@Override
protected void onStop() {
super.onStop();
Log.d("zty","这是ItemActivity的停止onStop");
}
@Override
protected void onResume() {
super.onResume();
Log.d("zty","这是ItemActivity的恢复onResume");
}
@Override
protected void onPause() {
super.onPause();
Log.d("zty","这是ItemActivity的暂停onPause");
}
@Override
protected void onRestart() {
super.onRestart();
Log.d("zty","这是ItemActivity的重启onRestart");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d("zty","这是ItemActivity的销毁onDestroy");
}
public ActivityResultLauncher test = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<ActivityResult>(){
@Override
public void onActivityResult(ActivityResult result) {
if (result.getResultCode() == 888){
Log.d("zty","onActivityResultLauncher...");
textView.setText(result.getData().getStringExtra("data"));
}
}
});
}
然后添加一个 ResultActivity用于让ItemActivity接受到它的返回值。只用使用intent.putExtra来返回需要的信息。其中data和888要填写正确否则不能正确的运行,而data和888也就是上文中提到的要注意到的。而这些都完成了之后就完成了跳转和回传的功能了。
ResultActivity代码
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.icu.util.Calendar;
import android.os.Bundle;
import android.util.Log;
public class ResultActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_result);
Log.d("zty","这是ResultActivity的创建onCreate");
Intent intent=new Intent();
intent.putExtra("data","这是是安卓作业"+"完成作业时间是:"+ Calendar.getInstance().getTime());
setResult(888,intent);
finish();
}
@Override
protected void onStart() {
super.onStart();
Log.d("zty","这是ResultActivity的启动onStart");
}
@Override
protected void onStop() {
super.onStop();
Log.d("zty","这是ResultActivity的停止onStop");
}
@Override
protected void onResume() {
super.onResume();
Log.d("zty","这是ResultActivity的恢复onResume");
}
@Override
protected void onPause() {
super.onPause();
Log.d("zty","这是ResultActivity的暂停onPause");
}
@Override
protected void onRestart() {
super.onRestart();
Log.d("zty","这是ResultActivity的重启onRestart");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d("zty","这是ResultActivity的销毁onDestroy");
}
}
Activity的生命周期
为了让Android App在活动(Activity)生命周期的各个阶段之间导航转换,Activity类提供了6个核心回调方法:onCreate()、onStart()、onResume()、onPause()、onStop()和onDestroy()。当活动进入新状态时,系统会调用这些回调方法。Activity类中定义了7个回调方法,这些称为我们系统的一个回调,又称为
callback
。覆盖了Activity生命周期的每一个环节1)onCreate()。
这个方法你已经看到过很多次了,我们在每个Activity中都重写了这个方法,它会在Activity第一次被创建的时候调用。你应该在这个方法中完成Activity的初始化操作,比如加载布局、绑定事件等。
这个方法在每次活动最开始启动时都会运行,并且在每一个活动中只允许这个方法出现一次。● (2)onStart()。
这个方法在Activity由不可见变为可见的时候调用。
当活动开始运行并转入不可运行时,这个方法开始运行,因为应用会为Activity进入前台并为支持交互做准备。● (3)onResume()。
这个方法在Activity准备好和用户进行交互的时候调用。此时的Activity一定位于返回栈的栈顶,并且处于运行状态。
活动会在进入“已恢复”状态时来到前台,然后系统调用onResume()回调方法。这是应用与用户交互的状态。应用会一直保持这种状态,直到某些事件发生,让焦点远离应用。此类事件包括接到来电、用户导航到另一个活动或设备屏幕关闭。● (4)onPause()。
这个方法在系统准备去启动或者恢复另一个Activity的时候调用。我们通常会在这个方法中将一些消耗CPU的资源释放掉,以及保存一些关键数据,但这个方法的执行速度一定要快,不然会影响到新的栈顶Activity的使用。
当App准备启动另一个活动时进行回调。●(5) onStop()。
这个方法在Activity完全不可见的时候调用。它和onPause()方法的主要区别在于,如果启动的新Activity是一个对话框式的Activity,那么onPause()方法会得到执行,而onStop()方法并不会执行。
当活动在完全不可见时进行回调。
● (6)onDestroy()。
这个方法在Activity被销毁之前调用,之后Activity的状态将变为销毁状态。
在活动销毁之前进行回调。(7)onRestart()。
这个方法在Activity由停止状态变为运行状态之前调用,也就是Activity被重新启动了。
当活动重新开始运行时回调。我使用了log来显示提示Activity的各个生命周期的开始和结束
生命周期代码 (onCreate()可看前面的)
ItemActivity
@Override
protected void onStart() {
super.onStart();
Log.d("zty","这是ItemActivity的启动onStart");
}
@Override
protected void onStop() {
super.onStop();
Log.d("zty","这是ItemActivity的停止onStop");
}
@Override
protected void onResume() {
super.onResume();
Log.d("zty","这是ItemActivity的恢复onResume");
}
@Override
protected void onPause() {
super.onPause();
Log.d("zty","这是ItemActivity的暂停onPause");
}
@Override
protected void onRestart() {
super.onRestart();
Log.d("zty","这是ItemActivity的重启onRestart");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d("zty","这是ItemActivity的销毁onDestroy");
}
ResultActivity
@Override
protected void onStart() {
super.onStart();
Log.d("zty","这是ResultActivity的启动onStart");
}
@Override
protected void onStop() {
super.onStop();
Log.d("zty","这是ResultActivity的停止onStop");
}
@Override
protected void onResume() {
super.onResume();
Log.d("zty","这是ResultActivity的恢复onResume");
}
@Override
protected void onPause() {
super.onPause();
Log.d("zty","这是ResultActivity的暂停onPause");
}
@Override
protected void onRestart() {
super.onRestart();
Log.d("zty","这是ResultActivity的重启onRestart");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d("zty","这是ResultActivity的销毁onDestroy");
}
}
实验结果
实验总结
这次实验对于activity的生命周期的各个阶段的开始和结束的时机及各个Activity的之间的跳转的理解有着有大的作用。实验的过程中应当着重于观察实际生命周期的各个阶段在哪个操作之后开始和结束,通过理论与实际的结合来达到深刻的理解。而对于跳转应主要掌握Intent,Launch, putExtra的各种操作和应用。
gitee的代码仓库地址
https://gitee.com/zhang-tian_yu/activity.git