您的位置:首页 > 产品设计 > UI/UE

startActivityForResult的用法,及requestCode、resultCode建议使用情况

2016-10-14 11:48 471 查看
有2个Activity,第一个跳转到第二个,第二个做完操作,再回到第一个。

布局就不写了,仅仅是几个textview点击来模拟

请求码设置为123,结果码设置为456

1、第一个activity:

public class MainActivity extends Activity {

//去其他activity
TextView to_other_act_tv;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

to_other_act_tv = (TextView) findViewById(R.id.to_other_act_tv);

to_other_act_tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

//startActivityForResult(Intent intent, int requestCode)
startActivityForResult(new Intent(MainActivity.this, MainActivity_2.class), 123);

}
});
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

Log.e("requestCode",requestCode+"");
Log.e("resultCode",resultCode+"");
Log.e("data",data+"");

super.onActivityResult(requestCode, resultCode, data);
}
}


2、第二个activity:

为了便于理解,先来个布局图



代码:

public class MainActivity_2 extends Activity {

//finish按钮
TextView finish_tv;

//同意按钮
TextView ok_tv;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_2);

finish_tv = (TextView) findViewById(R.id.finish_tv);

finish_tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});

ok_tv = (TextView) findViewById(R.id.ok_tv);

ok_tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

Intent intent = new Intent(MainActivity_2.this, MainActivity.class);
//setResult(int resultCode, Intent data)
setResult(456, intent);
finish();

}
});
}
}


测试情况及结果:

1、点击finish按钮,直接关闭,这时,在第一个activity中,打印出结果

E/requestCode: 123
E/resultCode: 0
E/data: null


2、点击同意按钮,这时,在第一个activity中,打印出结果

E/requestCode: 123
E/resultCode: 456
E/data: Intent { cmp=com.chen.demo/.MainActivity }


3、去到第二个activity后,点击手机返回键退回来,打印结果:

E/requestCode: 123
E/resultCode: 0
E/data: null


从上面的数据可以看出,如果第二个直接关闭,或者运行完一些操作自己关闭了,如果不特殊指定,只会返回请求码,结果码一般是系统默认的。如果第二个界面,是阅读协议,需要有同意按钮等用户手动点击的,携带结果码,会更明确,以便和请求的区分开,避免点击同意,和点击关闭按钮,返回的都是请求码。

建议使用情况是:如果另外开启的activity,不需要用户有手动同意等情况,可以简单使用请求码。如果另外开启的activity,有多种情况,涉及到用户有区别的选择,可以设置结果码。以便回到原activity后区分出用户的选择
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: