android通过Intent </self_obj>传递ArrayList <self_obj>

时间:2012-02-27 03:04:41

标签: android android-intent arraylist

我创建了一个名为ChannelObj的类,其中包含类似

的值
public class ChannelObj {
public String enable;
public String id;
public String name;
public String ptz;
public ChannelObj(Node n){
     this.enable =  n.getAttributes().getNamedItem("enabled").getNodeValue();
     this.id = n.getAttributes().getNamedItem("id").getNodeValue();
     this.name = n.getAttributes().getNamedItem("name").getNodeValue();
     this.ptz = n.getAttributes().getNamedItem("ptz").getNodeValue();
}
}

并且这个类可以创建包含我需要的数据的Obj;

之后,我有一个名为allChannel的ArrayList包含我已经拥有的所有ChannelObj

像这样

        for(int i = 0;i<num_of_channel;i++)
    {
        allChannel.add(new ChannelObj(n1.item(i)));
    }

我已检查allChannel中的数据是否正确

但我希望将此ArrayList传递给下一个Activity

我尝试过像

这样的方式
            Intent i = new Intent(this,ChannelListActivity.class);
        Bundle b = new Bundle();
        b.putParcelableArrayListExtra("dd", ArrayList<ChannelObj> allChannels);
        i.putExtra(String name,b);
        startActivity(i);

但没有奏效仍然错误

我想做什么?

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

Benoir给出的答案的替代方法是让您的ChannelObj类实现Serializable接口。您只使用简单的数据类型,因此所有(反)序列化都将在水下自动完成(g)(t)。

如果您的类实现了Serializable,那么您可以按如下方式将它添加到Bundle中:

bundle.putSerializable("CHANNELOBJ_LIST", mChannelObjList);

请注意,由于ArrayList<ChannelObj>接口未实现Serializable,您可能需要转换为List<T>(或List<T>的其他具体实现)。

检索下一个活动中的对象列表同样容易:

List<ChannelObj> mChannelObjList = (ArrayList<ChannelObj>) bundle.getSerializable("CHANNELOBJ_LIST");

答案 1 :(得分:0)

您的clas必须在Parcelable

实施{{1}}