《第一行代码》读书笔记:第十三章/进阶技巧(未完)

来源:互联网 发布:2016广电禁止网络电视 编辑:程序博客网 时间:2024/05/27 00:50

1:全局获取Context。

Android中有一个Application类,程序启动时它会初始化。我们通过定制自己的Application来管理一些全局的状态信息,如Context。

public class MyApplication extends Application{//全局获取Contextprivate static Context context;@Overridepublic void onCreate() {// TODO Auto-generated method stubcontext=getApplicationContext();}public static Context getContext(){return context;}}
getApplicationContext()获得程序级别的context;
getContext()返回context值。

不过需要告知系统初始化MyApplication而不是默认的Application,在Manifest中修改<application>:

<application android:name="com.包名.MyApplication">


2:Intent传递对象

1)putExtra()

有时候我们需要在Intent中添加一些附加数据以达到传值效果。

比如添加如下代码从FirstActivity到SecondActicity:

在FirstActivity中

Intent intent=new Intent(FirstActivity.this,SecondActivity.class);intent.putExtra("string_data","hello");intent.putExtra("int_data",100);startActivity(intent);
而在SecondActivity中接收的话:

getIntent().getStringExtra("string_data");getIntent().getIntExtra("int_data",0);


2)Serializable/Parcelable:
putExtra()支持的数据类型有限,有时我们要传递一些自定义对象。这时候就要用到传递对象的技巧。

Serializable,序列化,原理是将一个对象转换成可存储或可运输的状态,序列化后的对象就可以在网络上进行传输。
将对象所在的类实现Serializable接口就相当于序列化了对象,然后就直接putExtra("标记",对象),接收时则用getSerializableExtra();


Parcelable的原理是将一个对象分解成Intent支持的数据类型,同样需要实现Parcelable接口,然后重写describeContents()和writeToParcel()方法,前者return 0就行,后者需要writeString(),writeInt()之类将Person类中的字段一一写出。除此之外还要提供一个CREATOR常量,重写两个方法。其中readString()之类方法必须与之前write时顺序一致。

实例:

public class Person implements Parcelable{private String name;private int age;@Overridepublic int describeContents(){return 0;}@Overridepublic void writeToParcel(Parcel dest,int flags){dest.writeString(name);dest.writeInt(age);}public static final Parcelable.Creater<Person> CREATOR=new Parcelable.Creater<Person>(){    @Override    public Person createFromParcel(Parcel source){    person.name=source.readString();    person.age=source.readInt();    return person;}@Overridepublic Person[] newArray(int size){return new Person[size];}};//接收使用如下方法Person person=(Person)getIntent().getParcelableExtra("标记");

0 0