您的位置:首页 > 移动开发 > Android开发

Android开发基础 startActivityForResult()、onActivityResult()和setResult()方法之间的联系

2016-03-29 21:51 519 查看
在以前开发的时候,只是使用过,知道如果要是想从上一个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
}
}

}


好了先简单的介绍这些
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: