【威哥说】听说昨天肾7出来了。作为Android开发,我确实比别人晚知道了一天。今天看到隔壁医院有些人护着肾的位置走出来。我才意识到肾7终于发布了,不过现在割肾的人少了好多。我其实特别想说:爱护身体,还是学Android吧。
【思考】如果你可以免费学一门技术,你会咋选择?
【正文】在实际项目开发中我们不可避免的要传值,两个界面传值并且还要返回值怎么处理?Google给我们封装了一个startActivityForResult方法,今天就给大家说下这个方法的使用步骤。
首先如果想在Activity中得到新打开Activity 关闭后返回的数据,需要使用系统提供的startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,新的Activity 关闭后会向前面的Activity传回数据,为了得到传回的数据,必须在前面的Activity中重写onActivityResult(int requestCode, int resultCode, Intent data)方法。
public class MainActivity extends Activity {
private final static String TAG="MainActivity";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findViewById(R.id.button).setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
//为了得到新打开Activity关闭后返回的数据,需要使用startActivityForResult来跳转
//这里第二个参数为请求码,可以根据业务需求自己编号,类型为int
startActivityForResult(new Intent(MainActivity.this, OtherActivity.class), 1);
}
});
}
/**
* 为了得到传回的数据,必须在前面的Activity中(指MainActivity类)重写onActivityResult方法
*
* requestCode 请求码,即调用startActivityForResult()传递过去的值
* resultCode 结果码,结果码用于标识返回数据来自哪个新Activity
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
String result = data.getExtras().getString("result");//得到新Activity 关闭后返回的数据
Log.i(TAG, result);
}
}
当新Activity关闭后,新Activity返回的数据通过Intent进行传递,android平台会调用前面Activity 的onActivityResult()方法,把存放了返回数据的Intent作为第三个输入参数传入,在onActivityResult()方法中使用第三个输入参数可以取出新Activity返回的数据。
然后使用startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,新Activity关闭前需要向前面的Activity返回数据需要使用系统提供的setResult(int resultCode, Intent data)方法实现:
public class OtherActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.other);
Button button=(Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
//这里要实例化intent,用来存放要返回的数据
Intent intent = new Intent();
//把返回数据存入Intent
intent.putExtra("result", "My name is linjiqin");
//设置返回数据,第一个参数为返回码, 可以根据业务需要自己定义,上面代码中使用到的一样都是1
OtherActivity.this.setResult(1, intent);
//关闭Activity
OtherActivity.this.finish();
}
});
}
}
这样当第二个activity关闭就会返回数据,系统会调用onActivityResult方法并把值传过来,然后就可以执行相关的业务。