Android 入门第三讲02-Activity之间的跳转与传值((Activity的创建,Activity的跳转,Activity的关闭,Activity的任务栈,Activity跳转传递数据(普通数据+对象类型))
- 1.Activity的创建
- 2.Activity的跳转
- 3.Activity的关闭(finish方法)
- 4.Activity的任务栈(安卓的任务栈就是相当于把activity都放在一个栈里面)
- 5.Activity跳转传递数据
- 传递普通数据
- 传递对象类型
Android 入门第三讲01-Activity的简单逻辑操作(对文本,图片进行设置(两种获取控件的方法),按钮点击-点击按钮打印日志,获取文本框的值+计算器简易案例)
1.Activity的创建
1.找到需要创建的activity
2.点击finish
3.注意问题
4.解决方法
创建以后会生成
1.一个java文件
2.一个xml布局文件
3.manifests里多了一句代码 (所有的activity都一定要在manifests里进行注册)
这里讲解一下,为什么运行显示的是mainactivity的内容而不是main2activity
是因为在mainactivity下有这样两行代码
2.Activity的跳转
activity代码
核心代码
Button button =findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent=new Intent(MainActivity.this,Main2Activity.class);startActivity(intent);}});
运行
3.Activity的关闭(finish方法)
刚才我们实现跳转了一个界面,现在我们怎么返回上一个界面呢
方法一,如果也是用Intent ,我们运行的确可以实现返回,
但是这个方法有一个很大的问题,这里就需要讲到activity任务栈机制,在下面我会讲到,好奇的小伙伴可以提前看
方法二,用finish方法,把启动的第二个activity关闭,运行效果是一样的,但是此时任务栈里只有一个activity1了
4.Activity的任务栈(安卓的任务栈就是相当于把activity都放在一个栈里面)
如果是用Intent 跳转,返回也是Intent ,就会在安卓的任务栈里面产生两个activity1,在启动第一个activity1的时候,会把第一个activity1压入栈底,点击跳转,启动activity2,会把activity2压到第一个activity1的上面,点击返回,会启动第二个activity1,但实际上我们只需要启动一个activity1
5.Activity跳转传递数据
传递普通数据
1.activity1传递数据
2.activity2通过name接收数据
activity1代码
public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);final EditText editText=findViewById(R.id.editText);Button button =findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent=new Intent(MainActivity.this,Main2Activity.class);intent.putExtra(\"key\",editText.getText().toString());startActivity(intent);}});}}
activity2代码
public class Main2Activity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main2);String s = getIntent().getStringExtra(\"key\");TextView textView=findViewById(R.id.textView2);Button button=findViewById(R.id.button2);textView.setText(s);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {finish();}});}}
activity1xml布局文件
<?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=\".MainActivity\"><Buttonandroid:id=\"@+id/button\"android:layout_width=\"wrap_content\"android:layout_height=\"wrap_content\"android:layout_marginTop=\"250dp\"android:text=\"跳转\"app:layout_constraintEnd_toEndOf=\"parent\"app:layout_constraintStart_toStartOf=\"parent\"app:layout_constraintTop_toTopOf=\"parent\" /><TextViewandroid:id=\"@+id/textView\"android:layout_width=\"wrap_content\"android:layout_height=\"wrap_content\"android:layout_marginStart=\"22dp\"android:layout_marginLeft=\"22dp\"android:layout_marginTop=\"43dp\"android:text=\"第一个页面\"app:layout_constraintStart_toStartOf=\"@+id/button\"app:layout_constraintTop_toBottomOf=\"@+id/button\" /><EditTextandroid:id=\"@+id/editText\"android:layout_width=\"wrap_content\"android:layout_height=\"wrap_content\"android:layout_marginStart=\"75dp\"android:layout_marginLeft=\"75dp\"android:layout_marginTop=\"86dp\"android:ems=\"10\"android:inputType=\"textPersonName\"app:layout_constraintStart_toStartOf=\"parent\"app:layout_constraintTop_toTopOf=\"parent\" /></androidx.constraintlayout.widget.ConstraintLayout>
activity2xml布局文件
<?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=\".Main2Activity\"><TextViewandroid:id=\"@+id/textView2\"android:layout_width=\"wrap_content\"android:layout_height=\"wrap_content\"android:layout_marginTop=\"277dp\"android:text=\"第二个页面\"app:layout_constraintEnd_toEndOf=\"parent\"app:layout_constraintStart_toStartOf=\"parent\"app:layout_constraintTop_toTopOf=\"parent\" /><Buttonandroid:id=\"@+id/button2\"android:layout_width=\"wrap_content\"android:layout_height=\"wrap_content\"android:layout_marginBottom=\"53dp\"android:text=\"返回\"app:layout_constraintBottom_toTopOf=\"@+id/textView2\"app:layout_constraintEnd_toEndOf=\"parent\"app:layout_constraintStart_toStartOf=\"parent\" /></androidx.constraintlayout.widget.ConstraintLayout>
运行结果
传递对象类型
1.创建实体类先序列化实现Serializable接口
2.activity1 传递数据,给实体类赋值
3.activity2接收数据,注意接收的方法和文本框取值
activity1代码
public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button button=findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Student student=new Student();student.age=20;student.name=\"高冷小王子\";Intent intent=new Intent(MainActivity.this,Main2Activity.class);intent.putExtra(\"key\",student);startActivity(intent);}});
activity2代码
public class Main2Activity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main2);Student student= (Student) getIntent().getSerializableExtra(\"key\");//强转TextView textView=findViewById(R.id.textView);TextView textView1=findViewById(R.id.textView2);textView.setText(String.format(String.valueOf(student.age)));//注意需要格式化textView1.setText(String.format(student.name));Log.i(\"main\",student.name+ \"age:\"+student.age);}}
activity1的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=\".MainActivity\"><Buttonandroid:id=\"@+id/button\"android:layout_width=\"wrap_content\"android:layout_height=\"wrap_content\"android:layout_marginTop=\"164dp\"android:text=\"跳转\"app:layout_constraintEnd_toEndOf=\"parent\"app:layout_constraintStart_toStartOf=\"parent\"app:layout_constraintTop_toTopOf=\"parent\" /></androidx.constraintlayout.widget.ConstraintLayout>
activity2的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=\".Main2Activity\"><TextViewandroid:id=\"@+id/textView\"android:layout_width=\"wrap_content\"android:layout_height=\"wrap_content\"android:layout_marginTop=\"120dp\"android:text=\"TextView\"app:layout_constraintEnd_toEndOf=\"parent\"app:layout_constraintStart_toStartOf=\"parent\"app:layout_constraintTop_toTopOf=\"parent\" /><TextViewandroid:id=\"@+id/textView2\"android:layout_width=\"wrap_content\"android:layout_height=\"wrap_content\"android:layout_marginTop=\"21dp\"android:text=\"TextView\"app:layout_constraintStart_toStartOf=\"@+id/textView\"app:layout_constraintTop_toBottomOf=\"@+id/textView\" /></androidx.constraintlayout.widget.ConstraintLayout>
运行结果
6.Activity之间的数据回传
需求分析:第二个activity回传数据到第一个activity
activity1 注意和上面的代码区别
activity2
activity1代码
public class MainActivity extends AppCompatActivity {TextView textView;//全局变量@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textView=findViewById(R.id.textView1);Button button=findViewById(R.id.button);textView.setText(\"137888888888\");//先给定一个数据button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent=new Intent(MainActivity.this,Main2Activity.class);intent.putExtra(\"key\",textView.getText().toString());// startActivity(intent);startActivityForResult(intent,0);//发送码为0}});}@Overrideprotected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {super.onActivityResult(requestCode, resultCode, data);String s = data.getStringExtra(\"key2\");textView.setText(s);}}
activity2代码
public class Main2Activity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main2);String s= getIntent().getStringExtra(\"key\");final EditText editText=findViewById(R.id.editText);Button button=findViewById(R.id.button2);editText.setText(s);//接收数据button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent=getIntent();intent.putExtra(\"key2\",editText.getText().toString());//注意name不要重名了setResult(1,intent);//结果码为1finish();}});
运行结果
本节就讲到这里啦,但是关于activity的故事还没有结束哦,谢谢您的阅读,下一讲我们继续
Android 入门第三讲03-Activity的生命周期(理论)(Activity生命周期中的方法,Activity生命周期(一个和两个activity的生命周期分析))