Activity跳转——返回数据到前Activity

来源:互联网 发布:淘宝和别人互刷商品 编辑:程序博客网 时间:2024/05/18 01:41

           Android的startActivityForResult(Intent intent, int requestCode)方法可以用onActivityResult(int requestCode, int resultCode, Intent data)方法获得前Activity结束之后返回的数据。在startActivityForResult(Intent intent, int requestCode)方法中,第一个参数intent表示启动指定的Activity并且期望指定的Activity返回结果,第二个参数代表请求码,表示是哪个Activity请求返回结果;当新的Activity关闭后,系统都会自动调用回调方法onActivityResult(int requestCode, int resultCode, Intent data),为了知道该方法是由谁触发,可以使用requestCode,为了知道该结果由哪个新的Activity所返回,可以使用resultCode,resultCode由新的Activity结束前调用setResult(int resultCode, Intent intent)设置,data则是新的Activity所返回的数据。以下例子点击按钮进入注册界面,提交数据返回结果到第一Activity进行显示。

1.主界面只包含一个Button控件和TextView控件。(省略)

2.注册界面的xml代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="@dimen/activity_vertical_margin">
    
    <LinearLayout 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="center_vertical">
        <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="账号:"
        android:textSize="16sp"/>
   <EditText 
       android:id="@+id/etName" 
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:inputType="text"/>
    </LinearLayout>
    
    <LinearLayout 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="center_vertical">
        <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="密码:"
        android:textSize="16sp"/>
   <EditText 
       android:id="@+id/etPass" 
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:inputType="textPassword"/>
    </LinearLayout>
    
    <LinearLayout 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="center_vertical">
        <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="性别:"
        android:textSize="16sp"/>
   <RadioGroup 
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:orientation="horizontal"
       android:checkedButton="@+id/male">
      <RadioButton
         android:id="@+id/male" 
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="男"/>
      <RadioButton 
         android:id="@+id/female"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="女"/>
   </RadioGroup>
    </LinearLayout>
    
    <Button
        android:id="@+id/btnSubmit"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="注册并返回上一页面"
        />
</LinearLayout>


3.主界面java代码:

public class MainActivity extends Activity {
    private Button BtnReg;
    private TextView TvShow;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        BtnReg = (Button)findViewById(R.id.btnReg);
        TvShow = (TextView)findViewById(R.id.tvShow);
        BtnReg.setOnClickListener(new OnClickListener(){
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(MainActivity.this,RegActivity.class);
            startActivityForResult(intent, 10);  //请求码用于标识请求返回数据
        }
    });
}

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode==10 && resultCode==1) //匹配请求码和结果码,需要知道谁请求返回数据和谁返回数据,匹配则显示数据
        {
            StringBuilder sb = new StringBuilder();
            sb.append("您的姓名:").append(data.getExtras().getString("name")).append("\n")
            .append("您的密码:").append(data.getExtras().getString("pass")).append("\n")
            .append("您的性别:").append(data.getExtras().getString("sex"));
            TvShow.setText(sb.toString());
        }
    }
}


4.新Activity的java代码:

public class RegActivity extends Activity {
    private EditText et_name;
    private EditText et_pass;
    private RadioButton rb_male;
    //private RadioButton rb_female;
    private Button b_submit;
    private final int RESULTCODE = 1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_reg);

        et_name = (EditText)findViewById(R.id.etName);
        et_pass = (EditText)findViewById(R.id.etPass);
        rb_male = (RadioButton)findViewById(R.id.male);
        //rb_female = (RadioButton)findViewById(R.id.female);
        b_submit = (Button)findViewById(R.id.btnSubmit);

        b_submit.setOnClickListener(new OnClickListener(){
            @Override
            public void onClick(View v) {
                /**
                 * 此处省略判断输入是否为空以及输入是否非法
                */
                String str_name = et_name.getText().toString();
                String str_pass = et_pass.getText().toString();
                String str_sex = rb_male.isChecked() ? "男":"女";

                Intent data = getIntent();  //获取上一个Activity对应的Intent
                data.putExtra("name", str_name);
                data.putExtra("pass", str_pass);
                data.putExtra("sex", str_sex);

                setResult(RESULTCODE, data);//设置结果码并返回结果
                finish();   //结束该Activity
            }
        });
    }
}


4.配置AndroidManifest.xml

<activity
     android:name="com.czh.startactivityforresultdemo.RegActivity"
     android:label="@string/app_name" >
</activity>


5.运行结果:

主界面:


注册界面:


返回结果后的主界面:


原创粉丝点击