【问题标题】:get ArrayList<MyClass> with getIntent().getExtras()使用 getIntent().getExtras() 获取 ArrayList<MyClass>
【发布时间】:2014-11-06 12:31:15
【问题描述】:

在我的应用程序的一个活动中,我有一个启动新活动的意图,我想传递一个 ArrayList,即一个 ArrayList,其中每个项目都是一个自己的类的实例......我该怎么做?

我已经看到了可能的 getExtras(),例如 getStringArrayList() 或 getParcelableArrayList(),但它不起作用,我没有找到任何有效的类型。

谁能帮帮我?谢谢。

这是我的课:

public class ItemFile {
  protected long id;
  protected String nombre;
  protected String rutaImagen;
  protected boolean checked;

  public ItemFile(long id, String nombre, String rutaImagen, boolean check) {
      this.id = id;
      this.nombre = nombre;
      this.rutaImagen = rutaImagen;
      this.checked = check;
  }

  public long getId() {
    return id;
  }

  public void setId(long id) {
    this.id = id;
  }

  public String getNombre() {
    return nombre;
  }

  public void setNombre(String nombre) {
    this.nombre = nombre;
  }

  public String getRutaImagen() {
      return rutaImagen;
  }

  public void setRutaImagen(String rutaImagen) {
      this.rutaImagen = rutaImagen;
  }

  public boolean isChecked() {
      return checked;
  }

  public void setChecked(boolean checked){
      this.checked = checked;
  }

}

我必须如何更改它以设置 Parcelable?

【问题讨论】:

  • 您可以尝试使用 Parcable 实现 MyClass。看看这里。 stackoverflow.com/a/7181792/1602333
  • 这是最好的答案。在这篇文章中,它解释了我的问题。这篇文章的最后一个答案非常有用。

标签: android android-intent arraylist


【解决方案1】:

首先确保 MyClass 类实现 Parcelable 接口,然后使用此代码在其他 Activity 中获取 ArrayList :

在你的第一个活动中做这样的事情:

ArrayList<MyClass> myClassList= new ArrayList<MyClass>();
Intent intent = new Intent(<YOUR ACTIVITY CONTEX>, <NEXT ACTIVITY>);
intent.putExtra("myClassList", myClassList);
startActivity(intent);

在你的下一个活动中做这样的事情:

ArrayList<MyClass> list = (ArrayList<MyClass>)getIntent().getExtras()getSerializable("myClassList");

【讨论】:

    【解决方案2】:

    使 MyClass Parcelable。请参见下面的示例。

    public class MyClass implements Parcelable {
         private int mData;
    
         public int describeContents() {
             return 0;
         }
    
         public void writeToParcel(Parcel out, int flags) {
             out.writeInt(mData);
         }
    
         public static final Parcelable.Creator<MyParcelable> CREATOR
                 = new Parcelable.Creator<MyParcelable>() {
             public MyParcelable createFromParcel(Parcel in) {
                 return new MyParcelable(in);
             }
    
             public MyParcelable[] newArray(int size) {
                 return new MyParcelable[size];
             }
         };
    
         private MyParcelable(Parcel in) {
             mData = in.readInt();
         }
     }
    
     // Send it using
     ArrayList<MyClass> list;
     intent.putParcelableArrayListExtra("list", list);
    

    【讨论】:

      【解决方案3】:

      在第一个活动中

      ArrayList<MyClass> fileList = new ArrayList<MyClass>();
      Intent intent = new Intent(MainActivity.this, secondActivity.class);
      intent.putExtra("FILES_TO_SEND", fileList);
      startActivity(intent);
      

      在二中

      activity:ArrayList<MyClass> filelist =(ArrayList<MyClass>)getIntent().getSerializableExtra("FILES_TO_SEND");
      

      【讨论】:

        【解决方案4】:

        我自己一直在努力解决这个问题,但我在 tutorialspoint 上找到了一个相当简单的解决方案,对我来说效果很好。

        在源活动中,使用

        Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                    intent.putExtra("key", numbers);
                    startActivity(intent);
        

        然后在目标活动中,使用

        ArrayList<String> numbersList = (ArrayList<String>) getIntent().getSerializableExtra("key");
        

        完整教程的链接是:https://www.tutorialspoint.com/how-to-pass-an-arraylist-to-another-activity-using-intents-in-android

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-11-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多