【问题标题】:How to put a List in intent如何将列表置于意图中
【发布时间】:2011-06-30 21:04:59
【问题描述】:

我的一个活动中有一个列表,需要将其传递给下一个活动。

private List<Item> selectedData;  

我试着把它放在意图中:

intent.putExtra("selectedData", selectedData);  

但它不起作用。可以做什么?

【问题讨论】:

  • 到底是怎么回事?
  • 它说 Intent 不适用于参数(String, List

标签: android


【解决方案1】:

就像评论中提到的 howettl 一样,如果您将保存在列表中的对象设为可序列化,那么它变得非常容易。然后你可以把它放在一个 Bundle 中,然后你可以把它放在 Intent 中。这是一个例子:

class ExampleClass implements Serializable {
    public String toString() {
        return "I am a class";
    }
}

... */ Where you wanna create the activity /*

ExampleClass e = new ExampleClass();
ArrayList<ExampleClass> l = new ArrayList<>();
l.add(e);
Intent i = new Intent();
Bundle b = new Bundle();
b.putSerializeable(l);
i.putExtra("LIST", b);
startActivity(i);

【讨论】:

  • 其实一定是b.putSerialzeable("key", l),需要注意的是,要在其他活动中访问你的列表,你必须做到List&lt;ExampleClass&gt; listExtra = (ArrayList&lt;ExampleClass&gt;)( intent.getBundleExtra("LIST").getSerializable("key"))。不过,它比为您的 ExampleClass 实现 Parceable 要容易得多。
【解决方案2】:

您必须先将List 实例化为具体类型。 List本身就是一个接口。

如果您在对象中添加了implement the Parcelable interface,则可以使用putParcelableArrayListExtra() 方法将其添加到Intent

【讨论】:

  • 不,我试过了。没用。我也试过 view_order_intent.putParcelableArrayListExtra("selectedData", (ArrayList extends Parcelable>) selectedData);。结果没有错误,但我无法得到它。
  • selectedData = bundle.getParcelableArrayList("selectedData");。我试过这个来获取代码。我没有工作。
  • List是ArrayList的parent..方法具体要ArrayList..把List的类型改成ArrayList就行了
  • intent.putParcelableArrayListExtra("XXX", (ArrayList&lt;Item&gt;)yourList);(假设ItemParcelable
【解决方案3】:

我认为你的物品应该是可包裹的。你应该使用arraylist而不是list。 然后使用 intent.putParcelableArrayListExtra

【讨论】:

  • 举个例子真的很有用。
  • 你也可以让物品实现Serializable,它变得微不足道
【解决方案4】:

这对我有用。

//first create the list to put objects
private ArrayList<ItemCreate> itemsList = new ArrayList<>();

//on the sender activity
     //add items to list where necessary also make sure the Class model ItemCreate implements Serializable
     itemsList.add(theInstanceOfItemCreates);

        Intent goToActivity = new Intent(MainActivity.this, SecondActivity.class);
                        goToActivity.putExtra("ITEMS", itemsList);
                        startActivity(goToActivity);

    //then on second activity
    Intent i = getIntent();
            receivedItemsList = (ArrayList<ItemCreate>) i.getSerializableExtra("ITEMS");
            Log.d("Print Items Count", receivedItemsList.size()+"");
            for (Received item:
                 receivedItemList) {
                Log.d("Print Item name: ", item.getName() + "");
        }

我希望它也对你有用。

【讨论】:

    【解决方案5】:

    每个人都说您可以使用 Serializable,但没有人提到您可以将值转换为 Serializable 而不是列表。

    intent.putExtra("selectedData", (Serializable) selectedData);
    

    Core 的列表实现已经实现了 Serializable,因此您不必绑定到列表的特定实现,但请记住您仍然可以捕获 ClassCastException。

    【讨论】:

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