Android Bundle类 学习总结
生活随笔
收集整理的這篇文章主要介紹了
Android Bundle类 学习总结
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Android Bundle類
http://blog.csdn.net/randyjiawenjie/article/details/6651437根據(jù)google官方的文檔(http://developer.android.com/reference/android/os/Bundle.html)
Bundle類是一個(gè)key-value對(duì),“A mapping from String values to various Parcelable types.”
類繼承關(guān)系:
java.lang.Object
? ? ?android.os.Bundle
Bundle類是一個(gè)final類:
public final class
Bundle
extends Objectimplements Parcelable Cloneable
兩個(gè)activity之間的通訊可以通過(guò)bundle類來(lái)實(shí)現(xiàn),做法就是:
(1)新建一個(gè)bundle類
[java] view plain copy
Bundle mBundle = new Bundle(); ??
(2)bundle類中加入數(shù)據(jù)(key -value的形式,另一個(gè)activity里面取數(shù)據(jù)的時(shí)候,就要用到key,找出對(duì)應(yīng)的value)
[java] view plain copy
mBundle.putString("Data", "data from TestBundle"); ?
(3)新建一個(gè)intent對(duì)象,并將該bundle加入這個(gè)intent對(duì)象
[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> ??
兩個(gè)類如下:intent從TestBundle類發(fā)起,到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");//壓入數(shù)據(jù) ? ?
? ? ? ? ? ? ? ? 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> //得到傳過(guò)來(lái)的bundle ?
? ? ? ? String data = bundle.getString("Data");//讀出數(shù)據(jù) ? ?
? ? ? ? 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">測(cè)試Bundle用法</string> ?
? ? <string name="button">點(diǎn)擊跳轉(zhuǎn)</string> ?
? ? <string name="target">來(lái)到target activity</string> ?
</resources> ?
結(jié)果:
跳轉(zhuǎn)結(jié)果:
========
Android中Bundle的使用
http://blog.sina.com.cn/s/blog_a364999b01017i2z.html? ? SDK里是這樣描述:A mapping from String values to various Parcelable types。它幫助我將數(shù)據(jù)打包傳入intent里面,為使用這些數(shù)據(jù)提供了便利。
java代碼:
protected void onListItemClick (ListView l, View v, int position, long id)
{
super.onListItemClick(l, v, position, id);
//獲得選中項(xiàng)的HashMap對(duì)象?
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);
}
復(fù)制代碼
? ? ? ?1、實(shí)例化Bundle 一個(gè)對(duì)象,用putString(標(biāo)記,數(shù)據(jù))來(lái)將數(shù)據(jù)導(dǎo)入到Bundle對(duì)象中; 2、然后將Bundle對(duì)象導(dǎo)入到Intent對(duì)象中;
3、Intent啟動(dòng)另一個(gè)activity。
從intent中讀出需要的數(shù)據(jù):
java代碼:
bundle = getIntent().getExtras();?
if(bundle!=null)
Type=bundle.getString("type");
if(Type!=null)?
//從數(shù)據(jù)庫(kù)依據(jù)所選類型讀出 文章的Title,保存在cur中?
cur=myDBadapter.getTitle(new String[]{Type});
復(fù)制代碼
? ? ? ?4、Bundle對(duì)象可以從activity.getIntent().getExtras()中返回。 可見(jiàn),啟動(dòng)當(dāng)前activity 的Intent對(duì)象是由getIntent()來(lái)找到的。
5、通過(guò)Bundle的getString()方法,就可以讀出所要的數(shù)據(jù)。
這就是Bundle的經(jīng)典用法,包裹數(shù)據(jù)放入Intent中,目的在于傳輸數(shù)據(jù)。
========
Android中的Bundle的具體使用
http://txlong-onz.iteye.com/blog/934960?
一、API文檔說(shuō)明
1.介紹
用于不同Activity之間的數(shù)據(jù)傳遞
1.重要方法
clear():清除此Bundle映射中的所有保存的數(shù)據(jù)。
clone():克隆當(dāng)前Bundle
containsKey(String key):返回指定key的值
getString(String key):返回指定key的字符
hasFileDescriptors():指示是否包含任何捆綁打包文件描述符
isEmpty():如果這個(gè)捆綁映射為空,則返回true
putString(String key, String value):插入一個(gè)給定key的字符串值
readFromParcel(Parcel parcel):讀取這個(gè)parcel的內(nèi)容
remove(String key):移除指定key的值
writeToParcel(Parcel parcel, int flags):寫入這個(gè)parcel的內(nèi)容
二、實(shí)例
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的區(qū)別
SharedPreferences是簡(jiǎn)單的存儲(chǔ)持久化的設(shè)置,就像用戶每次打開(kāi)應(yīng)用程序時(shí)的主頁(yè),它只是一些簡(jiǎn)單的鍵值對(duì)來(lái)操作。它將數(shù)據(jù)保存在一個(gè)xml文件中
Bundle是將數(shù)據(jù)傳遞到另一個(gè)上下文中或保存或回復(fù)你自己狀態(tài)的數(shù)據(jù)存儲(chǔ)方式。它的數(shù)據(jù)不是持久化狀態(tài)。
========
總結(jié)
以上是生活随笔為你收集整理的Android Bundle类 学习总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 聚簇索引与非聚簇索引学习总结
- 下一篇: .net (object sender,