问题:在意图之间传递ArrayList会丢失数据

时间:2016-02-02 08:54:44

标签: android android-intent parcelable

我在ArrayList中传递自定义putParcelableArrayListExtra,但是当我在其他类的onCreate方法中收到它时,那么数组的某些值为null

put...   get...

[a]  ->  [a]

[b]  ->  null

[c]  ->  [b]

[d]  ->  null

[e]  ->  [c]

我在intent.putParcelableArrayListExtra(key, value);发送数据并将其设为arrayList = getIntent().getParcelableArrayListExtra(key));

请建议如何解决这个问题。

3 个答案:

答案 0 :(得分:2)

  1. 使用pojo / setter getter类并执行 Parcelable

    public class MyData implements Parcelable
    
  2. 声明你的pojo中的值是一个arraylist项

    MyData data = new MyData("id", "text");
    
  3. 使用您的另一项活动从意图中调用parcelable方法。

    Intent i = new Intent(this,MyActivity.class);
    i.putExtra("key", data);
    startActivity(i);
    
  4. 使用该类意图的parcelable方法获取列表,

    MyData data = i.getExtras().getParcelable("key");
    List<MyData> mList = new ArrayList<>();
    mList.add(data);
    

答案 1 :(得分:0)

如果E类型是Serializable,则可以以相同的方式传递ArrayList。

您可以调用Intent的putExtra(String name,Serializable值)来存储,并使用getSerializableExtra(String name)进行检索。

示例:

ArrayList<String> myList = new ArrayList<String>();
intent.putExtra("mylist", myList);

在另一项活动中:

ArrayList<String> myList = (ArrayList<String>) getIntent().getSerializableExtra("mylist");

答案 2 :(得分:0)

使所有使用Parecelable的类。然后覆盖writeToParcel并创建public static final Parcelable.Creator<YourClass>以从包中读取并从对象中创建对象。

但最简单的方法是使用Serializable接口。读写将自动处理。