【问题标题】:Issue : Passing ArrayList between intents loses data [duplicate]问题:在意图之间传递 ArrayList 会丢失数据 [重复]
【发布时间】:2016-07-21 21:52:31
【问题描述】:

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

put...   get...

[a]  ->  [a]

[b]  ->  null

[c]  ->  [b]

[d]  ->  null

[e]  ->  [c]

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

请建议如何解决此问题。

【问题讨论】:

  • 没有任何可打包的代码实现,这是任何人的猜测。分享必要的代码怎么样......???尝试使用parcelabler.com 生成可打包代码并将其粘贴到您的对象中。
  • 如果它是 Object 的 ArrayList,请发布您如何实现 Parcelable 接口的代码。

标签: android android-intent parcelable


【解决方案1】:

如果 E 类型是 Serializable,你可以用同样的方式传递一个 ArrayList。

调用 Intent 的 putExtra(String name, Serializable value) 进行存储,调用 getSerializableExtra(String name) 进行检索。

例子:

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

在另一个活动中:

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

【讨论】:

  • Parcelable > 在 Android 中可序列化。阅读本文了解更多信息link
【解决方案2】:

使所有使用的类都可以Parecelable。然后覆盖 writeToParcel 并创建 public static final Parcelable.Creator&lt;YourClass&gt; 以从包裹中读取并从您的对象创建对象。

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

【讨论】:

    【解决方案3】:
    1. 使用带有 Parcelable 实现的 pojo/setter getter 类。

      public class MyData implements Parcelable
      
    2. 在你的 pojo 中声明值,这将是一个数组列表项

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-08-09
      • 2013-09-02
      • 1970-01-01
      • 2017-03-08
      • 2013-08-09
      • 1970-01-01
      • 1970-01-01
      • 2011-08-03
      • 2021-03-17
      相关资源
      最近更新 更多