0

可能重复:
如何在 Android 中将对象从一个活动传递到另一个活动

我想将用户定义的类对象从一个Activity传递到另一个。我知道我们将 a 传递String给 other的方式Activity

Intent in=new Intent(LoginActivity.this,WebserviceClient.class);
in.putExtra("res", "abc");
startActivityForResult(in, 0);

以及如何在另一边提取它:

Intent i = getIntent();
res = i.getStringExtra("res");

但我想知道如何为用户定义的对象为双方执行此操作?

4

5 回答 5

1

您需要将您的类实现为Parcelable接口。本指南可能有助于将复杂的对象数据结构传递给 Intent

于 2012-10-22T06:31:02.033 回答
1

让您的类实现Parcelable并将其作为额外的意图传递。

于 2012-10-22T06:31:10.080 回答
1

实现您要发送的对象类的可序列化该类

  Intent in=new Intent(LoginActivity.this,WebserviceClient.class);
                    in.putExtra("res",objectOfClass);
                    startActivityForResult(in, 0);

提取另一面

 Bundle extraData = getIntent().getExtras();
        if (extraData != null) {
            objectOfClass = (Classname) extraData
                    .getSerializable("res");
        }
于 2012-10-22T06:31:22.140 回答
1

您可以使用我的类,将对象传递给您需要创建可打包对象的另一个活动,但请确保您的 bean 类在此处实现 parcel CategoryBean 是我的 bean 类

/**
         * A method to create pacelable{@link Parcelable} object
         * @param album
         * @return
         */
        public  ParcelHashMap parseObject(CategoryBean mCategoryBean){
            ParcelHashMap p = new ParcelHashMap();
            p.put("CategoryBean", mCategoryBean);
            return p;
        }

并从 Activity1 有意地传递它

Intent in=new Intent(Activity1.this,Activity2.class);
in.putExtra("myCatObject", parseObject(selectedCategoryObject));
startActivity(in);

在 secondActivity 中,只需传递该 parcelabel 对象即可获得如下所示的真实对象

    /**
     * To get parsed object from Parcelable object, you can use int,string or any object
     * @param parsedObje Parcelable
     * @return PhotosBean Object
     */
    public  CategoryBean parseObject(Parcelable parsedObje){
        return (CategoryBean)((ParcelHashMap)parsedObje).get("CategoryBean");
    }

包裹类

包 com.ixorian; 导入 java.util.HashMap;

import android.os.Parcel;
import android.os.Parcelable;

public class ParcelHashMap implements Parcelable {
    private HashMap<String,Object> map;

    public ParcelHashMap() {
        map = new HashMap<String,Object> ();
    }

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

    public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
        public ParcelHashMap createFromParcel(Parcel in) {
            return new ParcelHashMap(in);
        }

        public ParcelHashMap[] newArray(int size) {
            return new ParcelHashMap[size];
        }
    };

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

//  @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(map.size());
//      for (String s: map.keySet().toArray(new String[0])) {
//          dest.writeString(s);
//          dest.writeString((String) map.get(s));
//      }

         for (HashMap.Entry<String, Object> entry : map.entrySet()) {  
             dest.writeString(entry.getKey());  
             dest.writeValue(entry.getValue());  
             }  
    }

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

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

    public void put(String key, Object value) {
        map.put(key, value);
    }
}
于 2012-10-22T07:40:32.117 回答
0

我遵循在 Andriod 活动之间传递自定义对象的一种简单方法是在我的项目中定义一个 Singleton 类,其中包含我需要在活动之间传递的所有对象和变量,假设你想从活动传递一个自定义对象A-->B ,您定义一个包含要传递的对象模板的 Singleton 类,您只需在 Activity A 中调用 setter 方法,在 Activity B 中调用 getter。

于 2012-10-22T09:55:32.517 回答