android中对象弱引用的HashMap

时间:2010-12-16 08:47:44

标签: android

我们如何在android中使用对象中弱对象的HashMap来在活动之间传递复杂对象?我想将一个类的对象从一个活动传递到另一个活动,我怎么能在android中实现它。我知道我可以使用putExtra()方法。但是这种方法不会直接传递任何对象,而是传递简单的数据结构。请帮忙

提前致谢。

2 个答案:

答案 0 :(得分:5)

我建议将捆绑从一个活动传递到另一个活动。

创建一个实现 Parceblable接口的类

public class MyParcel implements Parcelable {
//A HASHMAP WHICH CAN HOLD ALL YOR OBJECTS
private HashMap<String,Object> activityParcel;

public MyParcel(){
    //INITIALIZING A HASHMAP
    activityParcel=new HashMap<String,Object>();

}

public void readFromParcel(Parcel in) {
    int count = in.readInt();
    for (int i = 0; i < count; i++) {
        activityParcel.put(in.readString(), in.readValue(Object.class.getClassLoader()));
    }
}

public MyParcel(Parcel in) {
    activityParcel = new HashMap<String,Object>();
    readFromParcel(in);
}

@Override
public int describeContents() {
    return activityParcel!=null?activityParcel.size():0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeInt(activityParcel.size());
    for (String s: (Set<String>)activityParcel.keySet()) {
        dest.writeString(s);
        dest.writeValue(activityParcel.get(s));
    }

}
//MANDATORY CLASS MEMBER ,NAME CREATOR IS ALSO MANDATED
public static final Parcelable.Creator<MyParcel> CREATOR=new Parcelable.Creator<MyParcel>() {

    @Override
    public MyParcel createFromParcel(Parcel source) {
        return new MyParcel(source);
    }

    @Override
    public MyParcel[] newArray(int size) {
        return new MyParcel[size];
    }

};

public Object get(String key){
    return activityParcel.get(key);
}


public void put(String key, Object value) {
    activityParcel.put(key, value);
}




}

现在,如果您要将包裹从活动A发送到活动B

MyParcel myParcel=new MyParcel();
myParcel.put("MyObject", new Date());//sends a blank date object.
Bundle myBundle = new Bundle();
myBundle.putParcelable("My Bundle Key", myParcel);
Intent contentIntent=new Intent(ActivityA.this,ActivityB.class);
startActivity(contentIntent);

现在来自ActivityB:

Bundle contetnBundle = getIntent().getExtras();

MyParcel myParcel = contetnBundle.getParcelable("My Bundle Key");
Date myDateWithActivityA=(Date)myParcel.get("MyObject");

答案 1 :(得分:0)

一种解决方案是创建一个Singleton类来保存您需要交换的对象。一个Activity将更新对象,另一个将读取和/或更新它们。您可以使用putExtra传递有关第二个活动需要处理或使用自定义数据网址方案的对象的信息。