一、A => B
A.java
public class A extends AppCompatActivity {
@Override
protected void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.first_layout);
// A 页面跳转 B 页面
Intent intent = new Intent(A.this, B.class);
startActivity(intent);
}
}
B.java
public class B extends AppCompatActivity {
@Override
protected void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.first_layout);
}
}
二、A => B,携带参数
A.java,传递参数
public class A extends AppCompatActivity {
@Override
protected void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.first_layout);
// A 页面跳转 B 页面并携带参数
Intent intent = new Intent(A.this, B.class);
String dataStr = "Hello B";
int dataNum = 100;
intent.putExtra("str", dataStr);
intent.putExtra("num", dataNum);
startActivity(intent);
}
}
B.java,接收参数
public class B extends AppCompatActivity {
@Override
protected void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.first_layout);
// 接收 A 传递过来的参数
Intent intent = getIntent();
String dataStr = intent.getStringExtra("str");
int dataNum = intent.getIntExtra("num");
}
}
三、B => A,携带参数
B=>A 在做电商项目时遇到过这种情景:订单页面(A)要选择地址需要前往地址页面(B),在地址页面(B)选完地址后还要返回订单页面(B=>A),此时希望携带地址页面(B)选择的数据。
A.java
public class A extends AppCompatActivity {
@Override
protected void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.first_layout);
// A 页面跳转 B 页面
Intent intent = new Intent(A.this, B.class);
startActivityForResult(intent, 1);
}
/**
* B 活动销毁时会触发该方法,将参数传递过来
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
switch (requestCode) {
case 1: // 这里的 1 就是 onCreate 方法最后一行中的 1
if (resultCode == RESULT_OK) {
String returnedData = data.getStringExtra("str");
Log.d(TAG, returnedData);
}
break;
default:
}
}
}
startActivityForResult() 也是用于启动活动,额外功能是在活动销毁时能够返回一个结果给上一个活动。
B.java
public class B extends AppCompatActivity {
@Override
protected void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.first_layout);
// B 销毁时往 A 传递参数
Intent intent = new Intent();
intent.putExtra("data")
String dataStr = intent.getStringExtra("str");
int dataNum = intent.getIntExtra("str", "Hello World");
setResult(RESULT_OK, intent);
finish(); // B 活动销毁,会往 A 活动传递数据,触发A 活动中 onActivityResult() 方法
}
}
四、A => B,传参最佳实践
在第二点中介绍了 A 页面跳转到 B 页面并携带参数。B 页面需要几个参数应该由 B 决定,而不是 A 页面传了几个 B 就用几个。
A.java
public class A extends AppCompatActivity {
@Override
protected void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.first_layout);
// A 页面跳转 B 页面,调用B的静态方法传递参数,传递参数个数与类型由B决定
B.actionStart(A.this, "data1", "data2");
}
}
B.java
public class B extends AppCompatActivity {
@Override
protected void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.first_layout);
// 接收 A 传递过来的参数
Intent intent = getIntent();
String dataStr = intent.getStringExtra("str");
int dataNum = intent.getIntExtra("num");
}
/**
* 静态方法,处理 B 页面接收的参数
*/
public static void actionStart (Context context, String data1, String data2) {
Intent intent = new Intent(context, B.class);
intent.putExtra("param1", data1);
intent.putExtra("param2", data2);
context.startActivity(intent);
}
}