在以前开发的时候,只是使用过,知道如果要是想从上一个Activity中得到处理的一些状态需要调用这几个方法,但是这几个方法中的参数老是记忆的很混乱,今天在开发项目的时候,忽然想到了一些东西,特意记下免得以后再忘记了。
简介
- startActivityForResult(Intent intent, Int requestCode)
- setResut(int resultCode, Intent intent)
- onActivityResult(int requestCode, int resultCode, Intent intent)
1.startActivityForResult(Intent intent, Int requestCode) 当开启一个需要返回处理结果的Activity时使用当前这个方法
参数1:intent 用来启动具体哪个Activity的意图(显示启动)
参数2:requestCode从字面上的意思看它叫请求码,我对这个参数的理解是用来标记具体请求的哪个页面,可以使用一个私有的静态方法来表示,
它最后要跟onActivityResult()方法中的requestCode参数进行比对,判断是否为我要请求的页面返回的数据,其实这个参数仅仅只是用在当前类,
所以用一个静态方法来表示就好了。
示例代码:
private static final int GO_MAIN_REQUEST = 1231;
private Context mContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
mContext = this;
Button btn = (Button) findViewById(R.id.button);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setClass(mContext, Main3Activity.class);
//这里就是简单的应用了
startActivityForResult(intent,GO_MAIN_REQUEST);
}
});
}
然后在开启的Activity中进行一些数据的处理,当页面即将关闭的时候使用setResult()方法,将处理的结果码设置为第一个参数,页面的关闭需要手动调用finish()方法,如果不设置的话会无法走到onActivityResult()方法。具体情况如果有需要的小伙伴可以查看源码。
2.setResult()。设置页面处理的结果码
参数1:resultCode,字面意思为结果码,我理解的含义为当前页面处理完数据后,需要返回给上一页面的具体的状态(比如说:成功了,失败了什么的)
因为这个结果码需要在onActivityResult()中跟resultCode进行比对,所以这个返回的结果码最好是定义为公共的静态变量。当然安卓也帮我定义了
三个常量,分别为成功:RESULT_OK;取消:RESULT_CANCELED;首次执行:RESULT_FIRST_USER;如果没有特殊需要可以直接使用
参数2:intent,当如果需要返回一些数据的时候,可以new一个Intent传递一些数据回上一个页面
代码示例
public static final int SUCCESS_TAG = 131;
public static final int DEFEAT_TAG = 132;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
//这里写的是一些伪代码,大家明白就行
Button defeat = new Button(Main3Activity.this);
Button success = new Button(Main3Activity.this);
defeat.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setResult(DEFEAT_TAG);
finish();
}
});
success.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setResult(SUCCESS_TAG);
finish();
}
});
}
3.onActivityResult()
这个方法中有三个参数
参数1:requestCode请求码,用来比对哪一个Activity返回的数据
参数2:resultCode结果码,用来判断上一个页面的处理结果
参数3:data返回的数据
示例代码
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (GO_MAIN_REQUEST == requestCode) {
// do something
if (Main3Activity.SUCCESS_TAG == resultCode) {
//do success
}
}
}
好了先简单的介绍这些