Android 入门第三讲02-Activity之间的跳转与传值((Activity的创建,Activity的跳转,Activity的关闭,Activity的任务栈,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() {
@Override
public 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 {
@Override
protected 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() {
@Override
public 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 {
@Override
protected 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() {
@Override
public 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">
<Button
android: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" />
<TextView
android: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" />
<EditText
android: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">
<TextView
android: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" />
<Button
android: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 {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button=findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public 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 {
@Override
protected 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">
<Button
android: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">
<TextView
android: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" />
<TextView
android: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;//全局变量
@Override
protected 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() {
@Override
public void onClick(View v) {
Intent intent=new Intent(MainActivity.this,Main2Activity.class);
intent.putExtra("key",textView.getText().toString());
// startActivity(intent);
startActivityForResult(intent,0);//发送码为0
}
});
}
@Override
protected 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 {
@Override
protected 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() {
@Override
public void onClick(View v) {
Intent intent=getIntent();
intent.putExtra("key2",editText.getText().toString());//注意name不要重名了
setResult(1,intent);//结果码为1
finish();
}
});
运行结果
本节就讲到这里啦,但是关于activity的故事还没有结束哦,谢谢您的阅读,下一讲我们继续
Android 入门第三讲03-Activity的生命周期(理论)(Activity生命周期中的方法,Activity生命周期(一个和两个activity的生命周期分析))