Android五种传递参数的方法_第1页
Android五种传递参数的方法_第2页
Android五种传递参数的方法_第3页
Android五种传递参数的方法_第4页
Android五种传递参数的方法_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2014-01-2418:42:13|分类:默认分类|举报|字号订阅Android开发中,在不同模块(如Activity)间经常会有各种各样的数据需要相互传递,我把常用的几种方法都收集到了一起。它们各有利弊,有各自的应用场景。我现在把它们集中到一个例子中展示,在例子中每一个按纽代表了一种实现方法。1. 利用Intent对象携带简单数据利用Intent的Extra部分来存储我们想要传递的数据,可以传送int,long,char等一些基础类型,对复杂的对象就无能为力了。1.1设置参数java/传递些简单的参数IntentintentSimple=newIntent();intentSimple.s

2、etClass(MainActivity.this,SimpleActivity.class);BundlebundleSimple=newBundle();bundleSimple.putString("usr","xcl");bundleSimple.putString("pwd","zj");intentSimple.putExtras(bundleSimple);startActivity(intentSimple);1.2接收参数javathis.setTitle("简单的参数传递例子"

3、;);/接收参数Bundlebunde=this.getIntent().getExtras();Stringeml=bunde.getString("usr");Stringpwd=bunde.getString("pwd");2. 利用Intent对象携带如ArrayList之类复杂些的数据这种原理是和上面一种是一样的,只是要注意下。在传参数前,要用新增加一个List将对象包起来。2.1设置参数java传递复杂些的参数MapvString,Object>map1=newHashMapvString,Object>();map1.put(&

4、quot;key1","value1");map1.put("key2","value2");List<Map<String,Objectlist=newArrayList<Map<String,Object>>();list.add(map1);Intentintent=newIntent();intent.setClass(MainActivity.this,ComplexActivity.class);Bundlebundle=newBundle();须定义一个list用于在budn

5、le中传递需要传递的ArrayList<Object>,这个是必须要的ArrayListbundlelist=newArrayList();bundlelist.add(list);bundle.putParcelableArrayList("list",bundlelist);intent.putExtras(bundle);startActivity(intent);2.1接收参数java<spanstyle="white-space:pre"></span>this.setTitle(”复杂参数传递例子"

6、;);/接收参数Bundlebundle=getIntent().getExtras();ArrayListlist=bundle.getParcelableArrayList("list");/从List中将参数转回List<Map<String,ObjectList<Map<String,Object>>lists=(List<Map<String,Object»)list.get(0);StringsResult=""for(MapvString,Object>m:lists)for(

7、Stringk:m.keySet()sResult+="rn"+k+":"+m.get(k);3. 通过实现Serializable接口3.1设置参数利用Java语言本身的特性,通过将数据序列化后,再将其传递出去。java/通过Serializable接口传参数的例子HashMapvString,String>map2=newHashMapvString,String>();map2.put("key1","valuel");map2.put("key2","value2&

8、quot;);BundlebundleSerializable=newBundle();bundleSerializable.putSerializable("serializable",map2);IntentintentSerializable=newIntent();intentSerializable.putExtras(bundleSerializable);intentSerializable.setClass(MainActivity.this,SerializableActivity.class);startActivity(intentSerializab

9、le);3.2接收参数javathis.setTitle("Serializable例子");/接收参数Bundlebundle=this.getIntent().getExtras();/如果传LinkedHashMap,贝Ubundle.getSerializable转换时会报ClassCastException,不知道什么原因/传HashMap倒没有问题。HashMapvString,String>map=(HashMapvString,String>)bundle.getSerializable("serializable");Str

10、ingsResult="map.size()="+map.size();Iteratoriter=map.entrySet().iterator();while(iter.hasNext()Map.Entryentry=(Map.Entry)iter.next();Objectkey=entry.getKey();Objectvalue=entry.getValue();sResult+="rnkey->"+(String)key;sResult+="rnvalue->"+(String)value;4. 通过实现Parc

11、elable接口这个是通过实现Parcelable接口,把要传的数据打包在里面,然后在接收端自己分解出来。这个是Android独有的,在其本身的源码中也用得很多,效率要比Serializable相对要好。4.1首先要定义一个类,用于实现Parcelable接口因为其本质也是序列化数据,所以这里要注意定义顺序要与解析顺序要一致噢。javapublicclassXcIParcelableimplementsParcelable/定义要被传输的数据publicintmint;publicStringmStr;publicHashMapvString,String>mMap=newHashMap

12、vString,String>();/DescribethekindsofspecialobjectscontainedinthisParcelable'smarshalledrepresentation.publicintdescribeContents()return0;/FlattenthisobjectintoaParcel.publicvoidwriteToParcel(Parcelout,intflags)/等于将数据映射到Parcel中去out.writeInt(mlnt);out.writeString(mStr);out.writeMap(mMap);/Inte

13、rfacethatmustbeimplementedandprovidedasapublicCREATORfield/thatgeneratesinstancesofyourParcelableclassfromaParcel.publicstaticfinalParcelable.Creator<XclParcelable>CREATOR=newParcelable.Creator<XclParcelable>()publicXclParcelablecreateFromParcel(Parcelin)returnnewXclParcelable(in);public

14、XclParcelablenewArray(intsize)returnnewXclParcelablesize;privateXclParcelable(Parcelin)/将映射在Parcel对象中的数据还原回来/警告,这里顺序一定要和writeToParcel中定义的顺序一致才行!!mint=in.readInt();mStr=in.readString();mMap=in.readHashMap(HashMap.class.getClassLoader();publicXclParcelable()/TODOAuto-generatedconstructorstub4.2设置参数jav

15、a/通过实现Parcelable接口传参的例子IntentintentParcelable=newIntent();XclParcelablexp=newXclParcelable();xp.mint=1;xp.mStr="字符串"xp.mMap=newHashMapvString,String>();xp.mMap.put("key","value");intentParcelable.putExtra("Parcelable",xp);intentParcelable.setClass(MainActiv

16、ity.this,ParcelableActivity.class);startActivity(intentParcelable);4.3接收参数java<spanstyle="white-space:pre"></span>this.setTitle("Parcelable例子");/接收参数Intenti=getIntent();XcIParcelablexp=i.getParcelableExtra("Parcelable");TextViewtv=(TextView)findViewByld(R.id

17、.tv);tv.setText("mInt="+xp.mlnt+"rnmStr"+xp.mStr+"rnsize()="+xp.mMap.size();5. 通过单例模式实现参数传递单例模式的特点就是可以保证系统中一个类有且只有一个实例。这样很容易就能实现,在A中设置参数,在B中直接访问了。这是几种方法中效率最高的。5.1定义一个单实例的类java单例模式publicclassXclSingleton/单例模式实例privatestaticXclSingletoninstanee=null;/synchronized用于线程安全,防止

18、多线程同时创建实例publicsynchronizedstaticXcISingletongetInstance()if(instanee=null)instanee=newXclSingleton();returninstanee;finalHashMapvString,Object>mMap;publicXclSingleton()mMap=newHashMapvString,Object>();publicvoidput(Stringkey,Objectvalue)mMap.put(key,value);publicObjectget(Stringkey)returnmMap.get(key);5.2设置参数java/通过单例模式传参数的例子XclSingleton.getInstance().put("key1","value1");XclSingleton.getInstance().put("key2"

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论