`
chenqiang5206
  • 浏览: 33757 次
  • 性别: Icon_minigender_1
  • 来自: 江西
社区版块
存档分类

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

 
阅读更多

在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界面如图


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

下面是注册窗口,界面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);
        	}
        });
    }
}

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


第二个接受信息窗口界面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中



分享到:
评论

相关推荐

    安卓activity间的数据传递

    首先,Activity间的通信是Android应用设计的重要部分,这涉及到启动一个新Activity、在Intent中携带数据以及使用Bundle来保存和恢复数据。Intent是Android系统中启动组件(如Activity)的载体,而Bundle则可以看作...

    android的activity传数据初级

    在Android中,有多种方法可以实现Activity间的数据交换,包括使用Intent、保存状态以及通过静态变量等。 1. **Intent**: Intent是Android中的一个核心概念,它用于启动一个Activity或Service,同时也被用来传递数据...

    036集-Bundle

    5. **使用Bundle的场景**: Bundle不仅用于Intent,还可以在Fragment间传递数据,或者在保存和恢复Activity的状态时使用。当设备旋转时,Android会默认销毁并重新创建当前Activity,这时可以利用onSaveInstanceState...

    activity传值

    Binder则是Android系统中进程间通信(IPC)的一种机制,但通常在更复杂的场景下使用,如Service与Activity之间的通信。 1. **Intent传值** Intent不仅仅是启动Activity的工具,它还可以携带数据。有两种主要类型的...

    Android handle传值Demo

    "Android handle传值Demo"就是这样一个实例,它展示了如何使用Handler和Bundle来实现在后台线程与主线程之间的数据传递。 首先,让我们了解下Handle(处理者)的概念。在Android中,主线程(UI线程)负责处理用户...

    Android 应用开发案例教程

    Intent是Android中用来启动Activity、Service或传递数据的机制,是应用组件间通信的关键。 5. **布局设计**:XML布局文件用于定义用户界面的结构,包括各种视图元素如TextView、EditText、Button等。理解布局管理器...

    android学习资料注册界面实例.pdf

    2. 数据交换:在Intent中使用`putExtra`添加键值对,在新Activity的`onCreate`中通过`getExtras`和`get`方法接收数据。 3. UI组件的创建与事件监听:创建Button、EditText等组件,并设置按钮点击事件监听器。 4. ...

    Android--kaifa.rar_android

    《Android--kaifa.rar_android》是一个关于Android平台开发的学习资源包,主要针对使用OK6410开发板进行Android嵌入式开发的初学者。这个压缩包包含了一份名为"Android应用程序开发宝典.pdf"的详细教程,对于想要...

    Android基础学习笔记

    - **Content Provider**: 提供数据共享机制,允许不同应用间的数据交换。 8. **项目构建问题**: 当手动导入的项目未生成gen目录时,需要设置Android API,clean项目,或通过菜单选项修复属性。 9. **项目目录结构...

    tony老师Android软件开发视频下载

    tony老师可能会演示如何创建和使用显式意图与隐式意图,以及如何使用bundle在intent中传递数据。 【权限管理】 Android有严格的权限管理系统,开发者需要声明应用所需的权限。在Android 6.0及以上版本,某些权限...

    深入浅出Android

    《深入浅出Android》是一本专注于Google手持设备应用程序设计的专业书籍,旨在为初学者提供全面且深入的Android开发知识。本书以清晰易懂的方式讲解了Android平台的核心概念、设计原则和开发技巧,帮助读者从零基础...

    android aidl dome下载

    总结起来,Android AIDL是Android系统中实现进程间通信的重要工具,它简化了跨进程调用的复杂性,使得开发者可以方便地在不同的应用程序组件之间共享数据和服务。通过AIDL,我们可以构建更加复杂的Android应用程序,...

    Android api文档

    - **概述**:ContentProvider用于在多个应用程序之间共享数据,它是Android平台的数据交换标准。 - **主要功能**: - 插入、删除、更新数据。 - 查询数据。 - 提供统一的数据访问接口。 - **使用方式**: - ...

    Android代码片段

    在Android开发领域,掌握一些关键的代码片段是至关重要的,特别是在初学阶段。这些代码片段可以帮助开发者快速理解和解决常见的编程问题。以下是对标题"Android代码片段"和描述中提到的知识点的详细阐述: 1. **...

    Android开发教程&笔记

    - 内容提供者(Content Provider):共享数据的接口,实现不同应用间的数据交换。 3. **用户界面设计** - 布局(Layout):XML文件定义界面元素的位置和关系,如线性布局、相对布局、网格布局等。 - 视图(View...

    38个学习android的简单例子

    35. **蓝牙通信**:实现设备间的数据交换,如蓝牙低功耗(Bluetooth LE)的使用。 36. **JobScheduler**:理解如何使用系统服务调度任务,优化后台运行。 37. **数据同步**:使用SyncAdapter进行后台数据同步,如云...

    Google Android SDK开发范例大全.docx

    讨论了如何通过Intent携带额外的数据(Bundle)来实现在不同活动之间的数据交换。 - **3.11 返回数据到前一个Activity——startActivityForResult方法** 介绍了如何使用`startActivityForResult()`方法从一个活动...

    Android:Android相关资料

    8. **ContentProvider**:数据共享的机制,允许应用间交换数据,例如联系人、日历信息。 9. **Android Layouts**:Android提供多种布局管理器,如LinearLayout、RelativeLayout、ConstraintLayout等,帮助开发者...

    10-02 Viewpager_Fragment底部选项卡(as)

    - 在Fragment和Activity之间,有时需要进行数据交换。可以使用接口回调、Bundle传递参数或者使用ViewModel进行通信。 - 在Fragment内部,通常使用LiveData和Observer实现数据的实时更新和界面响应。 6. **性能...

    android从HAL,jni,到app学习心得,绝对原创

    - 通过JNI调用机制实现Java层与C/C++层之间的数据交换。 ##### 2.2 示例代码 假设在Java层定义了一个方法`turnOnLed`: ```java public class LedControl { static { System.loadLibrary("ledtest"); // 加载...

Global site tag (gtag.js) - Google Analytics