您的位置:首页 > 移动开发 > Android开发

Android Bundle类 学习总结

2016-06-30 10:16 399 查看

Android Bundle类

http://blog.csdn.net/randyjiawenjie/article/details/6651437

根据google官方的文档(http://developer.android.com/reference/android/os/Bundle.html)

Bundle类是一个key-value对,“A mapping from String values to various Parcelable types.”

类继承关系:

java.lang.Object

     android.os.Bundle

Bundle类是一个final类:

public final class

Bundle

extends Objectimplements Parcelable Cloneable

两个activity之间的通讯可以通过bundle类来实现,做法就是:

(1)新建一个bundle类

[java] view plain copy

Bundle mBundle = new Bundle();   

(2)bundle类中加入数据(key -value的形式,另一个activity里面取数据的时候,就要用到key,找出对应的value)

[java] view plain copy

mBundle.putString("Data", "data from TestBundle");  

(3)新建一个intent对象,并将该bundle加入这个intent对象

[cpp] view plain copy

Intent intent = new Intent();    

intent.setClass(TestBundle.this, Target.class);    

intent.putExtras(mBundle);  

完整代码如下:

android mainfest.xml如下:

[java] view plain copy

<?xml version="1.0" encoding="utf-8"?>  

<manifest xmlns:android="http://schemas.android.com/apk/res/android"  

      package="com.tencent.test"  

      android:versionCode="1"  

      android:versionName="1.0">  

    <application android:icon="@drawable/icon" android:label="@string/app_name">  

        <activity android:name=".TestBundle"  

                  android:label="@string/app_name">  

            <intent-filter>  

                <action android:name="android.intent.action.MAIN" />  

                <category android:name="android.intent.category.LAUNCHER" />  

            </intent-filter>  

        </activity>  

    <activity android:name=".Target"></activity>  

    </application>  

    <uses-sdk android:minSdkVersion="7" />  

</manifest>   

两个类如下:intent从TestBundle类发起,到Target类。

类1:TestBundle类:

[java] view plain copy

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;  

  

public class TestBundle extends Activity {    

      

    private Button button1;  

    private OnClickListener cl;   

    public void onCreate(Bundle savedInstanceState) {    

        super.onCreate(savedInstanceState);    

        setContentView(R.layout.main);  

          

        button1 = (Button) findViewById(R.id.button1);  

        cl = new OnClickListener(){  

            @Override  

            public void onClick(View arg0) {  

                // TODO Auto-generated method stub  

                Intent intent = new Intent();    

                intent.setClass(TestBundle.this, Target.class);    

                Bundle mBundle = new Bundle();    

                mBundle.putString("Data", "data from TestBundle");//压入数据    

                intent.putExtras(mBundle);    

                startActivity(intent);  

            }  

        };  

        button1.setOnClickListener(cl);  

    }  

}    

类2: Target

[java] view plain copy

import android.app.Activity;    

import android.os.Bundle;    

  

public class Target extends Activity{    

  

    public void onCreate(Bundle savedInstanceState) {    

          

        super.onCreate(savedInstanceState);    

        setContentView(R.layout.target);    

        <span style="color:#ff6600;">Bundle bundle = getIntent().getExtras();   </span> //得到传过来的bundle  

        String data = bundle.getString("Data");//读出数据    

        setTitle(data);    

  

    }    

}    

布局文件:

main.xml

[java] view plain copy

<?xml version="1.0" encoding="utf-8"?>  

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  

    android:orientation="vertical"  

    android:layout_width="fill_parent"  

    android:layout_height="fill_parent"  

    >  

<TextView    

    android:layout_width="fill_parent"   

    android:layout_height="wrap_content"   

    android:text="@string/hello"  

    />  

<Button    

    android:layout_width="fill_parent"   

    android:layout_height="wrap_content"   

    android:text="@string/button"  

    android:id = "@+id/button1"  

    />   

</LinearLayout>  

target.xml

[java] view plain copy

<?xml version="1.0" encoding="utf-8"?>  

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  

    android:orientation="vertical"  

    android:layout_width="fill_parent"  

    android:layout_height="fill_parent"  

    >  

<TextView    

    android:layout_width="fill_parent"   

    android:layout_height="wrap_content"   

    android:text="@string/target"  

    />  

</LinearLayout>  

String.xml

[java] view plain copy

<?xml version="1.0" encoding="utf-8"?>  

<resources>  

    <string name="hello">Hello World, TestBundle!</string>  

    <string name="app_name">测试Bundle用法</string>  

    <string name="button">点击跳转</string>  

    <string name="target">来到target activity</string>  

</resources>  

结果:

跳转结果:

========

Android中Bundle的使用

http://blog.sina.com.cn/s/blog_a364999b01017i2z.html

    SDK里是这样描述:A mapping from String values to various Parcelable types。它帮助我将数据打包传入intent里面,为使用这些数据提供了便利。

java代码:

protected void onListItemClick (ListView l, View v, int position, long id)

{

super.onListItemClick(l, v, position, id);

//获得选中项的HashMap对象 

HashMap map=(HashMap)lv.getItemAtPosition(position);

String Type=map.get("Type"); 

Intent i=new Intent(this,title.class);

Bundle mBundle=new Bundle();

mBundle.putString("type", Type);

i.putExtras(mBundle);

startActivity(i);

}

复制代码

       1、实例化Bundle 一个对象,用putString(标记,数据)来将数据导入到Bundle对象中;  2、然后将Bundle对象导入到Intent对象中;

  3、Intent启动另一个activity。

  从intent中读出需要的数据:

java代码:

bundle = getIntent().getExtras(); 

if(bundle!=null)

Type=bundle.getString("type");

if(Type!=null) 

//从数据库依据所选类型读出 文章的Title,保存在cur中 

cur=myDBadapter.getTitle(new String[]{Type});

复制代码

       4、Bundle对象可以从activity.getIntent().getExtras()中返回。 可见,启动当前activity 的Intent对象是由getIntent()来找到的。

  5、通过Bundle的getString()方法,就可以读出所要的数据。

  这就是Bundle的经典用法,包裹数据放入Intent中,目的在于传输数据。

========

Android中的Bundle的具体使用

http://txlong-onz.iteye.com/blog/934960

 

一、API文档说明

  1.介绍

    用于不同Activity之间的数据传递

  1.重要方法

    clear():清除此Bundle映射中的所有保存的数据。

    clone():克隆当前Bundle

    containsKey(String key):返回指定key的值

    getString(String key):返回指定key的字符

    hasFileDescriptors():指示是否包含任何捆绑打包文件描述符

    isEmpty():如果这个捆绑映射为空,则返回true

    putString(String key, String value):插入一个给定key的字符串值

    readFromParcel(Parcel parcel):读取这个parcel的内容

    remove(String key):移除指定key的值

    writeToParcel(Parcel parcel, int flags):写入这个parcel的内容

二、实例

Java代码  收藏代码

public class BundleDemo extends Activity {  

    private EditText etName;  

    Button btn;  

  

    /* 

    * (non-Javadoc) 

    * @see android.app.Activity#onCreate(android.os.Bundle) 

    */  

    @Override  

    protected void onCreate(Bundle savedInstanceState) {  

        // TODO Auto-generated method stub  

        super.onCreate(savedInstanceState);  

        setContentView(R.layout.bundle);  

          

        etName = (EditText) findViewById(R.id.etname);  

        btn = (Button) findViewById(R.id.btn);  

          

        btn.setOnClickListener(new OnClickListener() {  

            @Override  

            public void onClick(View v) {  

                String info = etName.getText().toString();  

                Bundle bundle = new Bundle();  

  

                  //保存输入的信息  

                bundle.putString("name", info);  

                Intent intent=new Intent(BundleDemo.this,BundleDemo1.class);  

                intent.putExtras(bundle);  

                finish();  

                startActivity(intent);  

            }  

        });  

    }  

}  

 

 

Java代码  收藏代码

public class BundleDemo1 extends Activity {  

    private TextView etName;  

    /* (non-Javadoc) 

    * @see android.app.Activity#onCreate(android.os.Bundle) 

    */  

    @Override  

    protected void onCreate(Bundle savedInstanceState) {  

        // TODO Auto-generated method stub  

        super.onCreate(savedInstanceState);  

        setContentView(R.layout.b1);  

  

        etName=(TextView)findViewById(R.id.txtname);  

        Bundle b=getIntent().getExtras();  

        //获取Bundle的信息  

        String info=b.getString("name");  

        etName.setText("您的姓名:"+info);  

    }  

}  

 三、与SharedPreferences的区别

  SharedPreferences是简单的存储持久化的设置,就像用户每次打开应用程序时的主页,它只是一些简单的键值对来操作。它将数据保存在一个xml文件中

  Bundle是将数据传递到另一个上下文中或保存或回复你自己状态的数据存储方式。它的数据不是持久化状态。

========
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android bundle