startActivityForResult()用法

来源:互联网 发布:天空之眼 知乎 编辑:程序博客网 时间:2024/05/01 12:21
  /*如果想在Activity中得到新打开的Activity关闭后返回的值,需要使用系统提供的
 * startActivityForResult(Intent intent,int requestCode)
 * 方法打开新的新的Activity,
 * 新的Activity关闭后向前面的Activity传回数据,
 * 为了得到传回的数据,必须在前面的Activity中重写
 * onActicityResult(int requestCode,int resultCode,Intent data)方法

 */

   MainActivity的布局文件代码见前一篇(Intent传值),活动代码如下:

public static final int REQUEST=1;

public void onClick(View v) {//点击Button事件触发的相应操作
// TODO Auto-generated method stub
switch(v.getId()){                       

                    case R.id.button2:
Intent intent1=new Intent(MainActivity.this,RequestActivity.class);
//发送意图标识为REQUEST==1
//下面第二个参数为请求码,可以根据业务需求自己编号
startActivityForResult(intent1, REQUEST);

}}

/*
     * 为了得到传回的数据,必须在前面的Activity中(即MainActivity类)重写onActivityResult方法
     * 
     * requestCode:请求码,即调用startActivityForResult()传递过去的值
     * resultCode:结果码,结果码用于标识返回数据来自哪个新的Activity
     */

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
//requestCode表示请求的标识,resultCode表示有数据
if(requestCode==MainActivity.REQUEST && resultCode==RESULT_OK){
String str="账号"
         +data.getStringExtra(RequestActivity.KEY_USER_ID)+"\n"
         +"密码"
         +data.getStringExtra(RequestActivity.KEY_USER_PASSWORD);
 tv01.setText(str);
}
Toast.makeText(this, "requestCode="+requestCode+":"+"requestCode="+requestCode, Toast.LENGTH_LONG).show();
}

/*
     * 当新的Activity关闭后,新Activity返回的数据通过Intent进行传递,android平台会调用
     * 前面的MainActivity的onActivityResult()方法,把存放了返回数据的Intent作为第三个
     * 输入参数传入,在onActivityResult()方法中使用第三个输入参数可以取出新Activity
     * 返回的数据。
     */

新建的Activity命名为RequestActivity,其对应的布局文件为:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" 
        android:orientation="vertical">
        
        <EditText   
             android:id="@+id/et01"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
            />
        <EditText 
             android:id="@+id/et02"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
            />
         <Button
             android:id="@+id/btn01"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:text="StartActivityForResult"
         />
    </LinearLayout>

活动代码如下:

public class RequestActivity extends Activity implements OnClickListener{
       private Button btn01;
       private EditText et01;
       private EditText et02;
       public static final String KEY_USER_ID="KEY_USER_ID";
       public static final String KEY_USER_PASSWORD="KEY_USER_PASSWORD";
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.requestactivity);
btn01=(Button)findViewById(R.id.btn01);
et01=(EditText)findViewById(R.id.et01);
et02=(EditText)findViewById(R.id.et02);

btn01.setOnClickListener(this);
}
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId()){
case R.id.btn01:
//数据是使用intent返回
Intent intent=new Intent();
//把返回的数据存入Intent
intent.putExtra(KEY_USER_ID, et01.getText().toString());
intent.putExtra(KEY_USER_PASSWORD, et02.getText().toString());
/*
* 在MainActivity中,使用startActivityForResult(Intent intent,int requestCode)
* 方法打开新的Activity,新的Activity关闭前需要向MainActivity返回数据,这时
* 需要使用系统提供的setResult(int resultCode,Intent data)方法实现。
*/
//设置返回数据
/*
* setResult()方法的第一个参数值可以根据业务需求自己定义,下面的RESULT_OK是系统
* Activity类定义的一个常量,值为-1。
*/
setResult(RESULT_OK,intent);
//关闭Activity
finish();
break;
}
}  
}

0 0
原创粉丝点击