【问题标题】:pass arrayList to next activity using Intent使用 Intent 将 arrayList 传递给下一个活动
【发布时间】:2015-06-13 20:35:04
【问题描述】:

我正在处理一项任务,我想使用 Intent 将数组列表传递给下一个活动。 我想在列表视图中显示数据,因为我也创建了一个适配器,但问题是如何在意图中传递数组列表。

private ArrayList<ImageModel> test(){

    ArrayList results = new ArrayList();

    ImageModel newsData = new ImageModel();

    newsData.setQuestions("Q1.who belongs to melanistic color variant of any Panthera species");
    newsData.setImageView(R.drawable.ic_blackpanther);
    results.add(newsData);

    newsData = new ImageModel();

    newsData.setQuestions("Q2.who can run faster than any other land animal");
    newsData.setImageView(R.drawable.ic_chita);
    results.add(newsData);

    newsData = new ImageModel();

    newsData.setQuestions("Q3.who is belongs to family Elephantidae and the order Proboscidea");
    newsData.setImageView(R.drawable.ic_elephant);
    results.add(newsData);

    newsData = new ImageModel();

    newsData.setQuestions("Q4.Which animal is historically used in warfare");
    newsData.setImageView(R.drawable.ic_horse);
    results.add(newsData);

    newsData = new ImageModel();

    newsData.setQuestions("Q5.Which animal is united by their distinctive black and white stripes on his body");
    newsData.setImageView(R.drawable.ic_zebra);
    results.add(newsData);


    return results;
}

【问题讨论】:

  • 你通过意图传递的最大数据是多少?
  • 检查this
  • 多种方式发送数据.. 1. 可序列化 2.Parcelable 3. 使数组静态并在其他活动中获取它(但它违反OOP) 4. 广播它并在任何地方接收它

标签: android android-intent arraylist


【解决方案1】:

您可以使用 parcelabale 传递数组列表。您可以通过 parcelable 传递任何对象。将您的数组列表包装在 parcelable 中并将其作为附加内容传递,在其他活动中您可以获得 parcelable 并获取值。您可以分三个步骤完成。由于许多原因,Parcelable 比可序列化更好...因为知道这个link 退出

1. Arraylist 的 Parcelable 类示例

public class SampleParcelable implements Parcelable {
    String carName;
    String modelNumber;
    String carMake;
    int carPrice;

    public String getCarName() {
        return carName;
    }

    public void setCarName(String carName) {
        this.carName = carName;
    }

    public String getModelNumber() {
        return modelNumber;
    }

    public void setModelNumber(String modelNumber) {
        this.modelNumber = modelNumber;
    }

    public String getmMake() {
        return carMake;
    }

    public void setmMake(String mMake) {
        this.carMake = mMake;
    }

    public int getPrice() {
        return carPrice;
    }

    public void setPrice(int price) {
        carPrice = price;
    }

    @Override
    public int describeContents() {

        return 0;
    }

    public static final Parcelable.Creator<SampleParcelable> CREATOR = new Creator<SampleParcelable>() {

        public SampleParcelable createFromParcel(Parcel source) {

            SampleParcelable mBook = new SampleParcelable();
            mBook.carName = source.readString();
            mBook.carMake = source.readString();
            mBook.modelNumber = source.readString();
            mBook.carPrice = source.readInt();
            return mBook;

        }

        public SampleParcelable[] newArray(int size) {

            return new SampleParcelable[size];

        }

    };

    @Override
    public void writeToParcel(Parcel mParcel, int flags) {
        mParcel.writeString(carName);
        mParcel.writeString(modelNumber);
        mParcel.writeString(carMake);
        mParcel.writeInt(carPrice);
    }

}

2.将parcelable绑定到一个意图

Intent pIntent = new Intent(this, SecondActivity.class);
Bundle pBundle = new Bundle();
pBundle.putParcelable(PAR_KEY, mCar);
pIntent.putExtras(pBundle);

//starting next Activity with intent
startActivity(pIntent);

3.在第二个活动中从对象中获取parcelable

SampleParcelable mObjCar =(SampleParcelable)getIntent().getParcelableExtra(FirstActivity.PAR_KEY);

github 上的这个code 会帮助你更多...

【讨论】:

  • 什么是PAR_KEY,你在哪里声明对象mCar ..你能解释一下
  • PAR_KEY 是键值对中的一个键...您可以随意使用它。 mObjCar 你应该在你想要获得意图的第二个活动的 oncreate 中删除它..
【解决方案2】:

让您的 ImageModel 类实现 Serializable 接口。然后将arraylist作为额外的传递:

Intent intent = new Intent(getApplicationContext(), MyActivityClass.class);
    intent.putExtra("list", results);
    startActivity(intent);

然后在你的 Activity 的 onCreate() 中你可以检索数据:

ArrayList<ImageModel> list = (ArrayList<ImageModel>)getIntent().getSerializableExtra("list");

希望对你有帮助。

【讨论】:

    【解决方案3】:

    要么让您的数组列表可序列化serializable,所以请购买使其内容可序列化,这样您就可以通过捆绑将您的数组列表发送到下一个意图。

    【讨论】:

      【解决方案4】:

      在发布任何问题之前请先谷歌。 无论如何尝试下面的代码

          ArrayList<ImageModel> modelList= new ArrayList<ImageModel>();
          Bundle bundle = new Bundle();
          bundle.putSerializable("array_list", modelList);
          intent.putExtras(bundle);
      

      对于上面的代码,你的 ImageModel 类应该被序列化。

      【讨论】:

      • 你好,我是 Android 新手,昨天已经发布了我的代码,但这里没有人回复详细信息。stackoverflow.com/questions/25737668/…
      • 现在我将这个数组列表添加到其中以传递给列表视图的下一个活动
      【解决方案5】:

      MainActivity.class

      private ArrayList<ImageModel> listItem;
      
      Bundle bundle = new Bundle();
      bundle.putSerializable("array_list",listItem);
      Intent intent = new Intent(getApplicationContext(), MyActivityClass.class);
      intent.putExtra(intent);
      startActivity(intent);
      
      // and to another Activity get it as.
      
      Intent intent=this.getIntent();
      Bundle bundle=intent.getExtras();
      
       ArrayList<ImageModel> listItem= 
         (ArrayList<ImageModel>)bundle.getSerializable("array_list");
      

      ImageModel.class 你需要 ImageModel 类为 putSerializable 实现可序列化

      public class ImageModel implements Serializable{
      
                 // Generate getter and setter
          }
      

      【讨论】:

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