Bundle在Activity之间交换数据
Posted tuke_tuke
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bundle在Activity之间交换数据相关的知识,希望对你有一定的参考价值。
在Activity之间进行数据交换有一个“信使”:Intent,因此主要是将需要交换的数据放入Intent即可
Intent提供了多个重载方法,“携带”额外的数据:
放入Bundle数据:
putExtras(Bundle data);向Intent中放入需要“携带”数据包
Bundle getExtras();取出Intent所“携带”的数据包
放入键值数据:(源码底层实际上还是使用的Bundle)
putExtra(String name,Xxx value);按key-value形式放入数据,Xxx是任意类型
getXxxExtra(String name);按key值取出指定类型的数据
Bundle就是一个简单的数据携带包,Bundle方法:
放入基本类型:
putXxx(String key,Xxx data);向Bundle中放入Int,Long等各种类型的数据
getXxx(String key);取出Int,Long等各种类型数据
放入对象:
putSeralizable(String key,Seralizable data);放入一个可序列化的对象
getSeralizable(String key,Seralizable data);取出一个可序列化的对象
一般第一个Activity中:
* Bundle放数据用:
* putXxx(String key,Xxx value);想Bundle中放入int,Long等简单数据类型
* putSerializable(String key,Serializable data);想Bundle中放入可序列化的对象,主要用于放对象
* Intent放Bundle用:
* putExtras(Bundle data):向Intent中放入需要“携带”的数据包
被启动的Activity中:
* Intent取数据:
* Bundle getExtras();取出Intent所“携带”的数据包
* getXxxExtras(String key);从Intent中按key取出指定类型的数据,便携方式取Bundle中的数据
用第二个Activity处理注册信息:
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="请输入您的注册信息" android:textSize="20dp" /> <TableRow android:id="@+id/tableRow1" android:layout_width="wrap_content" android:layout_height="wrap_content" > <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="账号:" android:textSize="20dp" /> <EditText android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:ems="10" android:hint="请输入账号" android:selectAllOnFocus="true" > </EditText> </TableRow> <TableRow android:id="@+id/tableRow2" android:layout_width="wrap_content" android:layout_height="wrap_content" > <TextView android:id="@+id/textView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="密码:" android:textSize="20dp" /> <EditText android:id="@+id/password" android:layout_width="wrap_content" android:layout_height="wrap_content" android:ems="10" android:hint="请输入密码" android:inputType="textPassword" /> </TableRow> <TableRow android:id="@+id/tableRow3" android:layout_width="wrap_content" android:layout_height="wrap_content" > <TextView android:id="@+id/textView4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="性别:" android:textSize="20dp" /> <RadioGroup android:id="@+id/radioGroup1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" > <RadioButton android:id="@+id/radio0" android:layout_width="wrap_content" android:layout_height="wrap_content" android:checked="true" android:text="男" /> <RadioButton android:id="@+id/radio1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="女" /> </RadioGroup> </TableRow> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="注册" /> </TableLayout>
MainActivity.java
package com.hust.bundletest; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.RadioButton; /*用第二个Activity处理注册信息。 * 在Activity之间进行数据交换是同过Intent信使来实现的。Intent提供了多种重载的方法,来携带额外数据: * 1,使用Bundle对象捆绑数据,Intent携带Bundle对象 * putExtras(Bundle data):向Intent中放入需要“携带”的数据包 * Bundle getExtras();取出Intent所“携带”的数据包 * 2,对于简单的数据类型,可以使用便携的方法直接存,取Intent所携带的Bundle对象,源码里可发现都是先创建的Bundle对象 * putExtras(String key,Xxx value);想Intent中按键值对(key-value)的形式存入数据 * getXxxExtras(String key);从Intent中按key取出指定类型的数据 * */ /* * Bundle就是一个简单的数据携带包,该Bundle对象包含了多种方法: * 1,放入简单的数据类型 * putXxx(String key,Xxx value);想Bundle中放入int,Long等简单数据类型 * getXxx(String key);取出int,long个中简单的数据类型 *2,放入可序列化的对象,实现Seriliable接口的对象 * putSerializable(String key,Serializable data);想Bundle中放入可序列化的对象 * getSerializable(String key);取出可序列化的对象 * * 一般第一个Activity中: * Bundle放数据用: * putXxx(String key,Xxx value);想Bundle中放入int,Long等简单数据类型 * putSerializable(String key,Serializable data);想Bundle中放入可序列化的对象,主要用于放对象 * Intent放Bundle用: * putExtras(Bundle data):向Intent中放入需要“携带”的数据包 * * 被启动的Activity中: * Intent取数据: * Bundle getExtras();取出Intent所“携带”的数据包 * getXxxExtras(String key);从Intent中按key取出指定类型的数据,便携方式取Bundle中的数据 * */ public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btn=(Button) findViewById(R.id.button1); btn.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { // TODO Auto-generated method stub //获得的三个组件 EditText name=(EditText) findViewById(R.id.name); EditText password=(EditText) findViewById(R.id.password); RadioButton male=(RadioButton) findViewById(R.id.radio0); //判断是否被选 String sex=(male.isChecked())?"男":"女"; //封装成一个对象 Person p=new Person(name.getText().toString(),password.getText().toString(),sex); //创建Bundle对象 Bundle bundle=new Bundle(); bundle.putSerializable("person", p); //创建一个Intent对象 Intent intent=new Intent(MainActivity.this,ResultActivity.class); intent.putExtras(bundle); //启动intent对应的Activity startActivity(intent); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }
Person.java
package com.hust.bundletest; import java.io.Serializable; public class Person implements Serializable { String name; String password; String sex; public Person(String name, String password, String sex) { super(); this.name = name; this.password = password; this.sex = sex; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } }ResultActivity.java
package com.hust.bundletest; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.widget.TextView; public class ResultActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_result); //获取显示组件 TextView name=(TextView) findViewById(R.id.text1); TextView password=(TextView) findViewById(R.id.text2); TextView sex=(TextView) findViewById(R.id.text3); //获取Intent对象 Intent intent=getIntent(); //从Intent对象中获取序列数据 //Person p=(Person) intent.getSerializableExtra("person");相当于 Bundle bundle=intent.getExtras();//获取Bundle对象 Person p=(Person) bundle.getSerializable("person");//Bundle对象中获取可序列化对象 name.setText(p.getName()); password.setText(p.getPassword()); sex.setText(p.getSex()); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.result, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }
以上是关于Bundle在Activity之间交换数据的主要内容,如果未能解决你的问题,请参考以下文章
android 怎么在activity之间传递List 类型的数据
Activity之间数据传递(简单传递,数据包Bundle)