一、A => B
A.java
public class A extends AppCompatActivity {@Overrideprotected 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 {@Overrideprotected void onCreate (Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.first_layout);}}
二、A => B,携带参数
A.java,传递参数
public class A extends AppCompatActivity {@Overrideprotected 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 {@Overrideprotected 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 {@Overrideprotected 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 活动销毁时会触发该方法,将参数传递过来*/@Overrideprotected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {switch (requestCode) {case 1: // 这里的 1 就是 onCreate 方法最后一行中的 1if (resultCode == RESULT_OK) {String returnedData = data.getStringExtra("str");Log.d(TAG, returnedData);}break;default:}}}
startActivityForResult() 也是用于启动活动,额外功能是在活动销毁时能够返回一个结果给上一个活动。
B.java
public class B extends AppCompatActivity {@Overrideprotected 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 {@Overrideprotected 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 {@Overrideprotected 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);}}
