【问题标题】:how to pass a user defined object from one activity to another [duplicate]如何将用户定义的对象从一个活动传递到另一个活动[重复]
【发布时间】:2012-10-11 22:35:31
【问题描述】:

可能重复:
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");

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

【问题讨论】:

标签: android


【解决方案1】:

您需要将您的类实现为Parcelable 接口。 本指南可能会有所帮助Pass complex object data structure to Intent

【讨论】:

    【解决方案2】:

    让您的类实现Parcelable 并将其作为intent extra 传递。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 您的代码与他在问题中放置的代码有何不同?他在询问是否传递一个自定义对象而不仅仅是一个字符串
      • 检查我编辑的答案。它可能会让你满意。
      • 在 Android 上,Parcelable 比 Serializable 更快,后者是一个通用的 Java 构造,而 Parcelable 是 Android 的东西。
      【解决方案4】:

      你可以使用我的课程, 要将对象传递给另一个活动,您需要创建可打包对象,但请确保您的 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);
          }
      }
      

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 2013-01-12
          • 1970-01-01
          • 2011-01-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-24
          • 2011-02-23
          相关资源
          最近更新 更多