Intent.putExtra List

63

可能有重复:
如何在Intent中传递List

我想从一个活动传递List到另一个活动。到目前为止,我还没有成功。这是我的代码。

//desserts.java

private List<Item> data;  

@Override
public void onCreate(Bundle icicle) {
//Code
data.add(new Item(10, "dessert1"));
data.add(new Item(11, "dessert2"));
data.add(new Item(12, "dessert3"));
data.add(new Item(13, "dessert4"));
data.add(new Item(14, "dessert5"));
data.add(new Item(15, "dessert6"));
data.add(new Item(16, "dessert7"));
data.add(new Item(17, "dessert8"));
data.add(new Item(18, "dessert9"));
data.add(new Item(19, "dessert10"));
data.add(new Item(20, "dessert11"));  

//Some more code  
}  

@Override
public void onClick(View v) {  
Intent view_order_intent = new Intent(this, thirdpage.class);
view_order_intent.putExtra("data", data); 
startActivity(view_order_intent);  
}   

但是我无法以这种方式放置数据。 我之前在此处提出了这个问题,但没有太多进展。
请帮忙解决。还请告诉我如何在下一个活动中获取数据


3
需要帮助,谢谢。这样的评论并没有什么帮助。 - user790431
4个回答

131

如果您的List是一个字符串列表,请将数据作为ArrayList<String>,并使用intent.putStringArrayListExtra("data", data)

以下是您需要的代码骨架:

  1. 声明List

 private List<String> test;
  • 在适当的位置初始化列表

  •  test = new ArrayList<String>();
    

    并将适当的数据添加到test中。

  • 按以下方式传递意图:

  •  Intent intent = getIntent();  
     intent.putStringArrayListExtra("test", (ArrayList<String>) test);
    
  • 按以下方式检索数据:

     ArrayList<String> test = getIntent().getStringArrayListExtra("test");
    

  • 你的意思是我应该将它声明为ArrayList还是将其初始化为ArrayList? - user790431
    1
    但是这样我只能插入一个项目到列表中。我想要两个字符串,这是通过项目对象获取的。 - user790431
    我甚至都没有注意到还有像putStringArrayListExtra这样的方法,一直以为要将我的整数列表存储为int数组。所以,非常感谢你! - likejudo
    1
    @Mandel 如果它是一个自定义对象呢? - Rafael

    23

    如果您使用 ArrayList 而不是 List,那么您的问题也会得到解决。在您的代码中,只需将 List 修改为 ArrayList 即可。

    private List<Item> data;
    

    3
    之后,您可以通过 ArrayList<Item> items = (ArrayList<Item>) getArguments().getSerializable(EXTRA_ITEMS); 读取列表。 - CoolMind

    12

    您可以使用Serializable和Parcelable两种方式来实现它。本例将展示如何使用Serializable实现。

    class Customer implements Serializable
    {
       // properties, getter setters & constructor
    }
    
    // This is your custom object
    Customer customer = new Customer(name, address, zip);
    
    Intent intent = new Intent();
    intent.setClass(SourceActivity.this, TargetActivity.this);
    intent.putExtra("customer", customer);
    startActivity(intent);
    
    // Now in your TargetActivity
    Bundle extras = getIntent().getExtras();
    if (extras != null)
    {
        Customer customer = (Customer)extras.getSerializable("customer");
        // do something with the customer
    }
    

    现在看看这个链接。这个链接将为您提供如何使用Parcelable实现它的简要概述。

    看看 这个讨论,它会告诉你更好的实现方法。

    谢谢。


    2
    这实际上并没有回答如何在意图中放置一个列表的问题,只是关于如何将单个特定项目放入意图的说明。 - Joakim Engstrom
    @N-JOY,你有“与客户做某事”的示例代码吗?我该如何循环遍历客户模型并获取每个客户的信息?非常感谢。 - Woppi

    -3
     //To send from the activity that is calling another activity via myIntent
    
        myIntent.putExtra("id","10");
        startActivity(myIntent);
    
        //To receive from another Activity
    
                Bundle bundle = getIntent().getExtras();
                String id=bundle.getString("id");
    

    2
    它如何发送列表数据?“10”是什么? - user790431
    id是你可以从中检索到的字符串。而10是你正在发送的数据。在最后一行,如果你获取id,你将得到来自调用者活动的10。 - Rasel
    1
    是的,我已经在我的代码中尝试过这个了。没有帮助。 - user790431
    Bundle没有接收列表的方法,所以你的代码无法工作。请使用字符串数组代替。 - Rasel

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