初学Android,使用Bundle在Activity间交换数据(

系统 1602 0

在Android中,两个Acitivity之间是靠Intent传递信息的,因为Intent本来就起到信使的作用,所以用它来传递数据也显得顺理成章了.

Intent 提供了多个方法来"携带"额外的数据

putExtras(Bundle data): 向Intent中放入需要"携带"的数据

putXxx(String key,Xxx date):向Bundle放入Int,Long等各种类型的数据(Xxx指代各种数据类型的名称)

putSerializable(String key,Serializable date):向Bundle中放入一个可序列化的对象.

当然Intent也提供了相应的取出"携带"数据的方法

getXxx(String key):从Bundle取出Int,Long 等各种数据类型的数据.

getSerializable(String Key,Serializable data): 从Bundle取出一个可序列化的对象.

下面以使用getSerializable为例,定义一个可序列化的Person类,模拟一个用户注册的过程,通过注册那个窗口(Acitivity)传递注册信息到另一个窗口

下面是定义的一个DTO类Person用来记录注册的信息,注意!要定义成可序列化的类,继承Serializable

    package WangLi.Activity.Bundle;

import java.io.Serializable;

public class Person implements Serializable {
    private String _Name;
    private String _Passwd;
    private String _Gender;
    public String getName()
    {
    	return _Name;
    }
    public String getPass()
    {
    	return _Passwd;
    }
    public String getGender()
    {
    	return _Gender;
    }
    public Person(String Name,String Passwd,String Gender)
    {
    	this._Name = Name;
    	this._Passwd = Passwd;
    	this._Gender = Gender;
    }
}

  

第一个Activity界面如图

初学Android,使用Bundle在Activity间交换数据(八)

填入注册信息后,点"注册"后跳到新窗口,显示刚刚输入的信息

下面是注册窗口,界面xml 和代码

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TableLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >
       
        <TextView 
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="请输入您的注册信息"
            android:textSize="20sp"
            />
        
        <TableRow>
            <TextView
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:text="用户名:"
                android:textSize="16sp"
            />
            
            <EditText
                android:id="@+id/name"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:hint="请填写想注册的账号"
                android:selectAllOnFocus="true"
             />
        </TableRow>

        <TableRow>
            <TextView
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:text="密码:"
                android:textSize="16sp"
            />
            <EditText
                android:id="@+id/passwd"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:password = "true"
                android:selectAllOnFocus="true"
             />
        </TableRow>

        <TableRow>
            <TextView
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:text="性别"
                android:textSize="16sp"
            />
            <RadioGroup
                android:layout_width="fill_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>
        </TableRow>

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

</LinearLayout>
  
    package WangLi.Activity.Bundle;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;

public class BundleTest extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.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对象
        		Bundle data = new Bundle();
        		data.putSerializable("person", p);
        		//创建一个Intent
        		Intent intent = new Intent(BundleTest.this,ResultActivity.class);
        		intent.putExtras(data);
        		//启动intent对应的Activity
        		startActivity(intent);
        	}
        });
    }
}
  

下面是第接受信息窗口在接受到注册信息以后的样子

初学Android,使用Bundle在Activity间交换数据(八)

第二个接受信息窗口界面xml 及代码

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TableLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >
       
        <TextView 
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="请输入您的注册信息"
            android:textSize="20sp"
            />
        
        <TableRow>
            <TextView
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:text="用户名:"
                android:textSize="16sp"
            />
            
            <EditText
                android:id="@+id/name"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:hint="请填写想注册的账号"
                android:selectAllOnFocus="true"
             />
        </TableRow>

        <TableRow>
            <TextView
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:text="密码:"
                android:textSize="16sp"
            />
            <EditText
                android:id="@+id/passwd"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:password = "true"
                android:selectAllOnFocus="true"
             />
        </TableRow>

        <TableRow>
            <TextView
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:text="性别"
                android:textSize="16sp"
            />
            <RadioGroup
                android:layout_width="fill_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>
        </TableRow>

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

</LinearLayout>
  

    package WangLi.Activity.Bundle;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

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);
    	 //获取启动该Result的Intent
    	 Intent intent = getIntent();
    	 //获取该intent所携带的数据
    	 Bundle data = intent.getExtras();
    	 //从Bundle包中取出数据
    	 Person p = (Person)data.getSerializable("person");
    	 name.setText("用户名:"+p.getName());
    	 passwd.setText("密码:"+p.getPass());
    	 gender.setText("性别:"+p.getGender());
     }
}
  

当然,最后也别忘了把所有Activity都加入AndroidManifest.xml中



初学Android,使用Bundle在Activity间交换数据(八)


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论