在开发当中我们有时候需要ActivityA 的值或者变量传输到 ActivityB在B 界面得到A–>B 的内容值,并返回处理结果!这时候我们就可以使用startActivityForResult 进行开启一个新的界面,使用 setResult 进行数据的回传!
startActivity 与 startActivityForResult 启动方式的区别在这里就不作介绍了!
需要注意的是:
1、如果 ActivityB 在清单文件中声明了android:launchMode=”singleInstance”,这样 ActivityA、ActivityB 就不会再同一个栈中,导致setResult(RESULT_OK);失败。
2、this.startActivityForResult(intent, 200);
sourceCode:requestCode If >= 0, this code will be returned in onActivityResult() when the activity exits.
译文:如果> = 0 requestCode,此代码将返回onactivityresult()活动时退出。
3、setResult(resultCode, data); // 设置返回数据,中的 resultCode是否大于0;
代码:
public class MainActivityA extends AppCompatActivity {
private TextView tv_info;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
tv_info = (TextView) findViewById(R.id.tv_info);
}
public void openActivity(View view){
Intent intent = new Intent(this, ActivityB.class);
Bundle bundle = new Bundle();
bundle.putInt("age", 24);
intent.putExtras(bundle);
startActivityForResult(intent, RequestCode.ACTIVITY_REQUETCODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.i("wangly","请求码:"+requestCode);
Log.i("wangly","返回的结果码:"+ resultCode);
if (requestCode == RequestCode.ACTIVITY_REQUETCODE ){
switch (resultCode){
case RequestCode.ACTIVITY_RESULTCODE:
String result = data.getStringExtra("result");
sysOutString(result);
break;
}
}
super.onActivityResult(requestCode, resultCode, data);
}
/**
* 输出打印结果
* @param object
*/
private void sysOutString(Object object){
tv_info.setText(object.toString());
Toast.makeText(getApplicationContext(),object.toString(), Toast.LENGTH_LONG).show();
}
}
2>ActivityB
public class ActivityB extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second2);
TextView textView = (TextView) this.findViewById(R.id.textView);
Bundle bundle = getIntent().getExtras();
int age = bundle.getInt("age");
textView.setText("Activity A 传输的年龄:" + age);
}
public void closeActivity(View view) {
Intent intent = new Intent();
intent.putExtra("result", "经过查证你的年龄怎么有问题啊!!!!");
setResult(RequestCode.ACTIVITY_RESULTCODE, intent);
finish();
}
}
管理请求码、结果码
public class RequestCode {
//Activity 请求码
public final static int ACTIVITY_REQUETCODE = 100;
//Activity 返回结果码
public final static int ACTIVITY_RESULTCODE = 20;
}
控制台结果: