2014-2-18-Bundle 缓存传值

来源:互联网 发布:程序员小说 编辑:程序博客网 时间:2024/06/06 04:55
Bundle savedInstanceState


使用 Bundle 进行值传递 与 保存 需要给进行传递的对象套一层外壳 及继承Parcelable 的自定义对象


不然在进行保存时会抛出异常


对自定义对象 ArrayList<WifiIntro> 数据组 进行保存 示例:


Parcelable 外壳实现


public class Person implements Parcelable {


public ArrayList<WifiIntro> intros;


public ArrayList<WifiIntro> getIntros() {
return intros;
}


public void setIntros(ArrayList<WifiIntro> intros) {
this.intros = intros;
}


public String name;


public Person(ArrayList<WifiIntro> intros) {
// TODO Auto-generated constructor stub
this.intros = intros;
}


@Override
public int describeContents() {
return 0;
}


@Override
public void writeToParcel(Parcel dest, int flags) {


dest.writeTypedList(intros);
dest.writeString(name);
}


public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() {
// 重写Creator


@Override
public Person createFromParcel(Parcel source) {
Person p = new Person(new ArrayList<WifiIntro>());
p.name = source.readString();
return p;
}


@Override
public Person[] newArray(int size) {
// TODO Auto-generated method stub
return null;
}
};


示例中使用到的KEY:


private static final String KEY_CONTENT = "TestFragment:Content";


bundle 保存传递内容:


if (null != mContent && mContent.size() > 0) {
Person list = new Person(mContent);
bundle.putParcelable(KEY_CONTENT, list);
}


bundle 获取传递内容:


Person list = bundle.getParcelable(KEY_CONTENT);
ArrayList<WifiIntro> lContent = list.getIntros();
if (null != lContent && lContent.size() > 0) {
mContent = new ArrayList<WifiIntro>(lContent);
}
0 0
原创粉丝点击