Activity生命周期与跳转
一、设计目标与功能说明
二、代码解析
三、运行展示
四、源码仓库地址
一、设计目标与功能说明
在微信界面的基础上,在其中一页添加recycleview,并且对recycleview中的某一项点击后可以跳转到activity1,并且在activity1中通过按钮的点击可收到activity2的回传值。
二、代码解析
1.activity1
<?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=".Activity1">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="收藏"
android:textSize="20sp"
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.546" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="新闻界面"
android:textSize="50sp"
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.339" />
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.497"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.737" />
</androidx.constraintlayout.widget.ConstraintLayout>
2.activity2
activity2只提供一个回传值
<?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=".Activity2">
</androidx.constraintlayout.widget.ConstraintLayout>
3.recycleadapterdemo
package com.example.myapplication;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.List;
public class RecycleAdapterDemo extends RecyclerView.Adapter<RecycleAdapterDemo.MyViewHolder> {
private Context context;
private List<String> list;
private View inflater;
public RecycleAdapterDemo(Context context, List<String> list){
this.context=context;
this.list=list;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
inflater= LayoutInflater.from(context).inflate(R.layout.item_demo,parent,false);
MyViewHolder myViewHolder=new MyViewHolder(inflater);
return myViewHolder;
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, @SuppressLint("RecyclerView") int position) {
holder.textView.setText(list.get(position));
}
@Override
public int getItemCount() {
return list.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
TextView textView;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
textView=(TextView) itemView.findViewById(R.id.text_view);
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent =new Intent(context,Activity1.class);
context.startActivity(intent);
}
});
}
}
}
4.activity1
package com.example.myapplication;
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 Activity1 extends AppCompatActivity {
private static final String TAG = "wys";
private Button button;
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_1);
button = findViewById(R.id.button);
textView=findViewById(R.id.textView3);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(Activity1.this, Activity2.class);
test.launch(intent);
}
});
}
public ActivityResultLauncher test = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
if (result.getResultCode() == 2) {
Log.d(TAG, "onActivityResultLauncher...");
textView.setText(result.getData().getStringExtra("result"));
}
}
});
@Override
public void onStart() {
super.onStart();
Log.d(TAG,"Activity1:onStart");
}
@Override
public void onResume() {
super.onResume();
Log.d(TAG,"Activity1:onResume");
}
@Override
public void onPause() {
super.onPause();
Log.d(TAG,"Activity1:onPause");
}
@Override
public void onStop() {
super.onStop();
Log.d(TAG,"Activity1:onStop");
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d(TAG,"Activity1:onDestroy");
}
}
5.activity2
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
public class Activity2 extends AppCompatActivity {
private static final String TAG = "wys";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_2);
Intent intent=getIntent();
intent.putExtra("result","已被收藏N次");
setResult(2,intent);
finish();
}
public void onStart() {
super.onStart();
Log.d(TAG,"Activity2:onStart");
}
@Override
public void onResume() {
super.onResume();
Log.d(TAG,"Activity2:onResume");
}
@Override
public void onPause() {
super.onPause();
Log.d(TAG,"Activity2:onPause");
}
@Override
public void onStop() {
super.onStop();
Log.d(TAG,"Activity2:onStop");
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d(TAG,"Activity2:onDestroy");
}
}
6.主代码
上次已经建立监听器,重写Adapter中的监听方法和点击事件
package com.example.myapplication;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;
import androidx.fragment.app.FragmentManager;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity implements View.OnClickListener
{
private FragmentManager fm = getSupportFragmentManager();
private LinearLayout liaotian,lianxiren, pengyouquan, setting;
private ImageView lt,lxr,pyq,st;
private Fragment tab1= new tab1();
private Fragment tab2 = new tab2();
private Fragment tab3 = new tab3();
private Fragment tab4 = new tab4();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initFragment();
initImageView();
showFragment(0);
liaotian.setOnClickListener(this);
lianxiren.setOnClickListener(this);
pengyouquan.setOnClickListener(this);
setting.setOnClickListener(this);
}
private void initFragment() {
FragmentTransaction transaction = fm.beginTransaction();
transaction.add(R.id.content, tab1);
transaction.add(R.id.content,tab2);
transaction.add(R.id.content,tab3);
transaction.add(R.id.content,tab4);
transaction.commit();
}
private void initImageView() {
lt = findViewById(R.id.lt);
lxr = findViewById(R.id.lxr);
pyq = findViewById(R.id.pyq);
st = findViewById(R.id.st);
liaotian = findViewById(R.id.liaotian);
lianxiren = findViewById(R.id.lianxiren);
pengyouquan = findViewById(R.id.pengyouquan);
setting = findViewById(R.id.setting);
}
private void hideFragment(FragmentTransaction transaction) {
transaction.hide(tab1);
transaction.hide(tab2);
transaction.hide(tab3);
transaction.hide(tab4);
}
@Override
public void onClick(View view) {
FragmentTransaction fragmentTransaction = fm.beginTransaction();
hideFragment(fragmentTransaction);
resetImg();
switch (view.getId()) {
case R.id.liaotian:
showFragment(0);
break;
case R.id.lianxiren:
showFragment(1);
break;
case R.id.pengyouquan:
showFragment(2);
break;
case R.id.setting:
showFragment(3);
break;
default:
break;
}
}
private void resetImg() { //调用灰色的图片,以让点击过后的图片回复原色
lt.setImageResource(R.drawable.liaotian);
lxr.setImageResource(R.drawable.lianxiren);
pyq.setImageResource(R.drawable.pengyouquan);
st.setImageResource(R.drawable.setting);
}
private void showFragment(int i) { //控制图片颜色的变换,其意义是点击一个图片之后该图片就会变亮
FragmentTransaction transaction = fm.beginTransaction();
hideFragment(transaction);
switch (i) {
case 0:
transaction.show(tab1);
lt.setImageResource(R.drawable.liaotian1);
break;
case 1:
transaction.show(tab2);
lxr.setImageResource(R.drawable.lianxiren1);
break;
case 2:
transaction.show(tab3);
pyq.setImageResource(R.drawable.pengyouquan1);
break;
case 3:
transaction.show(tab4);
st.setImageResource(R.drawable.setting1);
break;
default:
break;
}
transaction.commit();
}
}
三、运行展示
四、源码仓库地址
https://gitee.com/wang-yisha/vx-activity.git