如何将List放入intent中

时间:2011-06-30 21:04:59

标签: android

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

private List<Item> selectedData;  

我尝试通过以下方式实现这一目标:

intent.putExtra("selectedData", selectedData);  

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

5 个答案:

答案 0 :(得分:12)

与评论中提到的howettl一样,如果你使列表中的对象可以序列化,那么它变得非常容易。然后你可以将它放在一个Bundle中,然后你可以把它放在意图中。这是一个例子:

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);

答案 1 :(得分:10)

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

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

答案 2 :(得分:4)

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

答案 3 :(得分:1)

这对我有用。

//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() + "");
        }

我希望它也适合你。

答案 4 :(得分:0)

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

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

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