如何将用户定义的对象从一个活动传递到另一个活动

时间:2012-10-22 06:27:02

标签: android

  

可能重复:
  How to pass object from one activity to another in Android

我想将用户定义的类对象从一个Activity传递给另一个String。我知道我们将Activity传递给其他Intent in=new Intent(LoginActivity.this,WebserviceClient.class); in.putExtra("res", "abc"); startActivityForResult(in, 0); 的方式:

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

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

{{1}}

但是我想知道如何为用户定义的对象双方做这个?

5 个答案:

答案 0 :(得分:1)

您需要将您的类实现到Parcelable界面。 本指南可能有助于Pass complex object data structure to Intent

答案 1 :(得分:1)

让您的班级实施Parcelable并将其作为额外意图传递。

答案 2 :(得分:1)

实现 Serializable 该类要发送的对象类

  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");
        }

答案 3 :(得分:1)

你可以用我的班级, 将对象传递给另一个需要创建parcelable对象的活动,但要确保你的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");
    }

parcel的类

package com.ixorian;     import 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);
    }
}

答案 4 :(得分:0)

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