如何将ArrayList放入Bundle中

8
我已经将一些值放入了ArrayList中,示例如下:
    private List<InfoProduct> product;

    product = new ArrayList<>();
    product.add(new InfoProduct(R.drawable.cloth, Product_title, "0", Product_data2, lunch,R.drawable.cardview_circle_corner));
    product.add(new InfoProduct(R.drawable.guitar, Product_title, "1", Product_data2, lunch,R.drawable.cardview_circle_corner));
    product.add(new InfoProduct(R.drawable.cloth, Product_title, "2", Product_data2, lunch,R.drawable.cardview_circle_corner));
    product.add(new InfoProduct(R.drawable.guitar, Product_title, "3", Product_data2, lunch,R.drawable.cardview_circle_corner));
    product.add(new InfoProduct(R.drawable.cloth, Product_title, "4", Product_data2, lunch,R.drawable.cardview_circle_corner));
    product.add(new InfoProduct(R.drawable.guitar, Product_title, "5", Product_data2, lunch,R.drawable.cardview_circle_corner));
    product.add(new InfoProduct(R.drawable.cloth, Product_title, "6", Product_data2, lunch,R.drawable.cardview_circle_corner));
    product.add(new InfoProduct(R.drawable.guitar, Product_title, "7", Product_data2, lunch,R.drawable.cardview_circle_corner));
    product.add(new InfoProduct(R.drawable.cloth, Product_title, "8", Product_data2, lunch,R.drawable.cardview_circle_corner));
    product.add(new InfoProduct(R.drawable.guitar, Product_title, "9", Product_data2, lunch,R.drawable.cardview_circle_corner));

当我需要跳转到另一个 Fragment 时,我想使用 Bundle 来传输我的 ArrayList ,因此我编写了一些代码来实现这个功能。

    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.replace(R.id.fragment_youtube, new FragmentYoutubeProduct(), "youtube");
    ft.addToBackStack("youtube");
    Bundle bundle = new Bundle();
    bundle.putStringArrayList("Product",product);
    ft.commit();

我在bundle.putStringArrayList("Product",product);这行代码上遇到了错误,如何解决?


这是您自定义的类,因此您需要将其传递为可序列化或可解包对象。 - Piyush
1
当方法期望得到ArrayList<String>时,请不要输入List<InfoProduct> - Selvin
1
可能是如何使用Intents从一个Android Activity发送对象到另一个Activity?的重复问题。注意:这实际上是关于放置Extras,即Bundle的问题。 - Selvin
4个回答

14

首先,使 InfoProduct 实现 Parcelable 接口。可以参考这个 链接

然后使用

bundle.putParcelableArrayList(product)

你可以通过以下方式获得ArrayList

getParcelableArrayList(...)

2
你需要使用 bundle.putParcelableArrayList() 方法,并将你的列表实例化为私有的 ArrayList<InfoProduct> product;。同时确保 InfoProduct 实现了 Parcelable 接口。

2

1
你的代码为:
bundle.putStringArrayList("Product",product);

尝试将字符串数组列表放入包中。但是,您没有一个字符串数组列表,而是一个InfoProduct的数组列表。
因此,您需要将您的InfoProduct数组列表放入包中。为此,您需要使用该方法putParcelableArrayList
bundle.putParcelableArrayList("Product", product);

为了实现这一点,您还需要确保您的对象InfoProduct是可由Android序列化的可序列化对象。因此,您需要让它实现Parcelable接口本篇文章也可能对您有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接