目录
3、跳转页面UI-activity_detailed.xml
一、作业目标
1、用log展示生命周期的状态变化。实现对Activity生命周期的理解;
2、实现在recycleview中点击后跳转;
3、实现最新的Activityforresult功能,点击按钮后收到回传值;
二、效果展示
三、log展示生命周期状态变化
1、代码:
以detailedActivity.java为例,查看onCreate()、onPause()、onStop()、onDestory()、onRestart、onResume()函数被调用的生命周期:
super.onCreate(savedInstanceState);
Log.d("AC","detailedActivity onCreate");
@Override
protected void onPause() {
super.onPause();
Log.d("AC","detailedActivity onPause");
}
@Override
protected void onStop() {
super.onStop();
Log.d("AC","detailedActivity onStop");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d("AC","detailedActivity onDestroy");
}
@Override
protected void onRestart() {
super.onRestart();
Log.d("AC","detailedActivity onRestart");
}
@Override
protected void onResume() {
super.onResume();
Log.d("AC","detailedActivity onResume");
}
2、实现及分析
首先,进入初始界面:
这时:
① MainActivityonCreate:程序刚刚被创建完成
② MainActivityonResume:进入了可以与用户交互的模式
接着,任意点击一个recycleview中的文字,跳转到详情页面:
这时:
①MainActivityonPause():被暂停,不能执行任何代码
②detailedActivityonCreate:程序刚刚被创建完成
③detailedActivityonResume:进入了可以与用户交互的模式
④MainActivityonStop():被隐藏
然后,点击页面上的bottom:
这时:
①detailedActivity被暂停,不能执行任何代码;
②ButResActivity被创建完成;
③detailedActivity重新进入可以与用户进行交互的状态;
④Activityforresult传值完成后,ButResActivity被摧毁;
再次点击当前页面的bottom,可以刷新显示时间:
对此,该Activity生命周期分析同上。
最后,点击返回键,回到最初的recycleView:
这时:
①detailedActivityonPause:先被暂停
②MainActivityonRstart:被重启
③MainActivityonResume:进入可以与用户交互的状态
④detailedActivityonStop:被隐藏
⑤detailedActivityonDestory:被摧毁
四、recycleview中实现点击跳转
0、跳转效果
1、在adapter.java中设置onClick()
在点击任意文字后,会将该文字,与该文字对应的图片id传给intent,实现对应图片的调用。
holder.textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Bundle bundle = new Bundle();
bundle.putString("text",text);
//将图片的id传递过去
bundle.putInt("img",img);
Intent intent = new Intent(rec_context,detailedActivity.class);
intent.putExtras(bundle);
rec_context.startActivity(intent);
}
});
2、跳转页面:detailedActivity.java
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("AC","detailedActivity onCreate");
setContentView(R.layout.activity_detailed);
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
det_text=findViewById(R.id.det_text);
det_textView=findViewById(R.id.det_textView);
det_imageView=findViewById(R.id.det_image);
String text = bundle.getString("text");
int image = bundle.getInt("img");
det_textView.setText(text);
det_imageView.setImageResource(image);
if (getSupportActionBar()!=null)
{
getSupportActionBar().hide();
}
det_button=findViewById(R.id.det_button);
det_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(detailedActivity.this,ButResAcitvity.class);
test.launch(intent);
}
});
3、跳转页面UI-activity_detailed.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=".detailedActivity">
<TextView
android:id="@+id/det_textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="detail"
android:textSize="40sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.529" />
<Button
android:id="@+id/det_button"
android:layout_width="147dp"
android:layout_height="106dp"
android:text="Click Me! 点我显示时间"
android:textSize="17sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/det_textView"
app:layout_constraintVertical_bias="0.431" />
<ImageView
android:id="@+id/det_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toTopOf="@+id/det_textView"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.354"
tools:srcCompat="@tools:sample/avatars" />
<TextView
android:id="@+id/det_text"
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.422" />
</androidx.constraintlayout.widget.ConstraintLayout>
五、实现Activityforresult功能
0、回传效果
1、ButResActivity.java中实现回传
点击按钮后,会回传当前时间,并修改部分UI字体,显示时间后再次点击会刷新时间。
其中,设置resultcode为666,显示时间的textview的id为data,显示“当前时间为:”的textview的id为data_C。
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.d("AC","ButResAcitvity onCreate");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_but_res_acitvity);
Intent intent=getIntent();
intent.putExtra("data", new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new java.util.Date()));
intent.putExtra("data_C","当前时间为:");
setResult(666,intent);
finish();
}
2、detailedActivity.java中实现接收
public ActivityResultLauncher test= registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
if(result.getResultCode()==666){
det_textView.setText(result.getData().getStringExtra("data"));
det_text.setText(result.getData().getStringExtra("data_C"));
};
}
}
);