使用Bundle在Activity之间交换数据

当一个Activity启动另一个Activity时,常常会有一些数据需要传过去。其中,两个Activity之间存在一个”信使“:Intent,因此我们主要讲需要交换的数据放入Intent中即可。

Intent提供了多个重载的方法来”携带“额外的数据包。
putExtras(Bundle data):向Intent中放入需要”携带“的数据包。
Bundle getExtras():取出Intent中所”携带“的数据包
putExtra(String name, Xxx value):向Intent中按key-value对的形式存入数据。
getXxxExtra(String name):向Intent中按key取出指定类型的数据。

上面方法中的Bundle就是一个简单的数据携带包,该Bundle对象包含了多个方法来存入数据。

putXxx(String key, Xxx data):向Bundle中放入Int、Long等各种类型的数据。
putSerializable(String key , Serializable data):向Bundle中放入一个可序列化的对象。

为了取出Bundle数据携带包里的数据,Bundle提供如下方法:
getXxx(String key) : 从Bundle中取出Int、Long等各种类型的数据。
getSerializable(String key, Serializable data):从Bundle中取出一个可序列化的对象。

下面是一个 ”通过第一个Activity的填写注册信息、在第二个Activity显示注册信息 “的实例

首先是第一个Activity的布局代码:



<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center_horizontal"
    >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="请输入你的注册信息"
        android:textSize="20sp"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:orientation="horizontal">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="用户名:"
            android:textSize="16sp"/>

        <EditText
            android:id="@+id/name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:width="200px"
            android:hint="name"
            android:selectAllOnFocus="true"/>
    LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:orientation="horizontal">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="密码:"           
            android:textSize="16sp"/>

        <EditText
            android:id="@+id/passwd"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:width="200px"
            android:password="true"
            android:selectAllOnFocus="true"/>
    LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="center_horizontal"
        >

        <TextView 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="性别:"
            android:textSize="16sp"/>

        <RadioGroup
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <RadioButton
                android:id="@+id/male"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="男"
                android:textSize="16sp"/>

            <RadioButton
                android:id="@+id/female"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="女"
                android:textSize="16sp"/>
        RadioGroup>
    LinearLayout>

    <Button 
        android:id="@+id/bn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="注册"
        android:textSize="16sp"/>
LinearLayout>

该界面对应的Java类代码如下:

public class MainActivity extends ActionBarActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button bn = (Button) findViewById(R.id.bn);
        bn.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                EditText name = (EditText)findViewById(R.id.name);
                EditText passwd = (EditText)findViewById(R.id.passwd);
                RadioButton male = (RadioButton) findViewById(R.id.male);

                String gender = male.isChecked() ? "男 " : "女";
                Person p = new Person(name.getText().toString(), passwd.getText().toString(), gender);
                Bundle data = new Bundle();
                data.putSerializable("person", p);

                Intent intent = new Intent(MainActivity.this, ResultActivity.class);
                intent.putExtras(data);
                startActivity(intent);
            }
        });
    }
}

第二个显示信息布局文件:



<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView 
        android:id="@+id/name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="18sp"/>

    <TextView 
        android:id="@+id/passwd"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="18sp"/>

    <TextView
        android:id="@+id/gender"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="18sp"/>

    <Button 
        android:id="@+id/back"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="返回"/>
LinearLayout>

第二个界面布局的Java类代码如下:

package com.example.menutest;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.*;

public class ResultActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.result);
        TextView name = (TextView) findViewById(R.id.name);
        TextView passwd = (TextView) findViewById(R.id.passwd);
        TextView gender = (TextView) findViewById(R.id.gender);
        Button back = (Button) findViewById(R.id.back);

        Intent intent = getIntent();
        Person p = (Person) intent.getSerializableExtra("person");
        name.setText("你的用户名:"+p.getName());
        passwd.setText("你的密码为:"+ p.getPasswd());
        gender.setText("你的性别为:" + p.getGender());

        back.setOnClickListener(new OnClickListener() {
            public void onClick(View source) {
                Intent intent = new Intent(ResultActivity.this, MainActivity.class);
                startActivity(intent);
                finish();
            }
        });
    }
}

其中用到的Person对象Java代码:

package com.example.menutest;

import java.io.Serializable;

public class Person implements Serializable{
    private Integer id;
    private String name;
    private String passwd;
    private String gender;

    public Person(String name, String passwd, String gender) {
        this.name = name;
        this.passwd = passwd;
        this.gender = gender;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPasswd() {
        return passwd;
    }

    public void setPasswd(String passwd) {
        this.passwd = passwd;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }
}

运行结果如下:
使用Bundle在Activity之间交换数据_第1张图片
使用Bundle在Activity之间交换数据_第2张图片

你可能感兴趣的:(android开发)