#Activity的生命周期与跳转
##功能的实现
##实现的结果
###实现功能包括:一、在微信聊天界面Recyclerview列表项增加单项点击功能,点击后跳转到新建立的activity1。二、实现最新的activityforresult功能,在activity1添加按钮可收到另一个新建立的activity2的回传值。三、使用log展现跳转时生命周期的状态变化。
####功能一的实现:
在微信聊天界面的recyclerview的item列表添加一个button控件
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="60dp"
android:layout_weight="1"
android:text="详情" />
在适配器Myadpter绑定Button控件,并设置点击事件,同时,该点击时间实现的功能是跳转到另一个activity界面,因此使用intent机制,它可以实现两个组件之间的连接,通过传递一个Intent对象至 Context.startActivity()以载入一个activity
public void onBindViewHolder(@NonNull Myadpter.MyViewHolder holder, int position) {
// 将数据和控件绑定
holder.textView4.setText(list_chat.get(position));
holder.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context,jump_MainActivity1.class);
intent.putExtra("zhangyujia","18");
context.startActivity(intent);
}
});
}
public class MyViewHolder extends RecyclerView.ViewHolder {
TextView textView4;
Button button;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
textView4=itemView.findViewById(R.id.textView4);//滚动时快速设置值
button=itemView.findViewById(R.id.button1);
}
}
同时,被跳转的新的activity1可以通过调用 getIntent() 方法来查看激活它的intent.
#####功能二的实现:
在activity1界面增添一个button按钮,用于实现跳转到activity2
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="再跳转"
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.585" />
在activity实现的功能包括:绑定控件按钮并设计点击事件实现页面的跳转及数据的回传。
这里使用ActivityResultLauncher实现activity(fragment)之间的通信,同样也是使用intent连接,返回一个activityresult.其中包含两个方法,ActivityResultContracts.StartActivityForResult()用于实现页面的跳转,ActivityResultCallback()用于传参。使用ActivityResultLauncher的实例即可激活。
public ActivityResultLauncher test=registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
if(result.getResultCode()==2)
{
TextView textView=findViewById(R.id.textView9);
textView.setText(result.getData().getStringExtra("age1"));
}
}
}
);
同时使用被跳转的activity使用setResult(int, Intent),会返回一个intent对象(可以携带数据),和整形数据(返回码),目的是确定将值返回给哪一个activity。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_jump_main2);
Intent intent2=getIntent();
intent2.putExtra("age1",intent2.getStringExtra("age1")+intent2.getStringExtra("age2"));
// TextView textView;
// textView=findViewById(R.id.textView10);
// textView.setText((CharSequence) intent2);
setResult(2,intent2);
finish();
}
####功能三的实现:
@Override
protected void onStart() {
super.onStart();
Log.d("zyj","这是主界面的onstart");
}
@Override
protected void onStop() {
super.onStop();
Log.d("zyj","这是主界面的onStop");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d("zyj","这是主界面的onDestroy");
}
@Override
protected void onPause() {
super.onPause();
Log.d("zyj","这是主界面的onPause");
}
@Override
protected void onRestart() {
super.onRestart();
Log.d("zyj","这是主界面的onRestart");
}
@Override
public void recreate() {
super.recreate();
Log.d("zyj","这是主界面的recreate");
}
@Override
protected void onResume() {
super.onResume();
Log.d("zyj","这是主界面的onResume");
}
###实现的结果
####虚拟机运行结果
####由log展现出来的activity生命周期
仓库地址:https://gitee.com/kelsey-zhang/my-program_new