在Java中数组列表意向额外 [英] Array List Intent extra in Java

查看:127
本文介绍了在Java中数组列表意向额外的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想跳过我的的ArrayList 意图。但我不能找到额外写什么?任何get方法我越来越喜欢错误不适用于字符串。

项目详细信息:

 公共类ItemDetails {

公共字符串的getName(){
    返回名称;
}
公共无效setname可以(字符串名称){
    this.name =名称;
}
公共字符串getItemDescription(){
    返回itemDescription;
}
公共无效setItemDescription(字符串itemDescription){
    this.itemDescription = itemDescription;
}
公共字符串用getPrice(){
    返回的价格;
}
公共无效setPrice(字符串价格){
    this.price =价格;
}
公众诠释getImageNumber(){
    返回imageNumber;
}
公共无效setImageNumber(INT imageNumber){
    this.imageNumber = imageNumber;
}

公众诠释getVideoNumber(){
    返回videoNumber;
}
公共无效setVideoNumber(INT videoNumber){
    this.videoNumber = videoNumber;
}

公共无效setChild(ArrayList中< ItemDetails> item_child)
{
    this.item_child = item_child;
}
公众的ArrayList< ItemDetails> getChild()
{
    返回this.item_child;
}
公共无效的setParent(ArrayList中< ItemDetails> item_parent)
{
    this.item_parent = item_parent;
}
公众的ArrayList< ItemDetails>的getParent()
{
    返回this.item_parent;
}



私人字符串名称;
私人字符串itemDescription;
私人字符串的价格;
私人诠释imageNumber;
私人诠释videoNumber;
私人的ArrayList< ItemDetails> item_child;
    私人的ArrayList< ItemDetails> item_parent;
}
 

我的类:

 静态类ViewHolder {
    TextView的txt_itemName;
    TextView的txt_itemDescription;
    TextView的txt_itemPrice;
    ImageView的itemImage;
    ArrayList的< ItemDetails> item_parent;
    ArrayList的< ItemDetails> item_child;
}
 

我的putExtra:

  intObj.putExtra(exerciselist,obj_itemDetails.getChild());
 

GetChild功能:

 公开的ArrayList< ItemDetails> getChild()
{
   返回this.item_child;
}
 

但我找不到我怎么写来获得ArrayList的?

 的ArrayList< ItemDetails> child1 = getIntent()。?????????
 

解决方案
  

但我找不到我怎么写得到的ArrayList

简短的回答:你不能。你只能通过的ArrayList<字符串> ,然后用

检索

  getIntent()getStringArrayListExtra(键)。
 


但是。如果您想通过意图进行自定义对象的对象必须实现:

  • Parcelable接口 或< A HREF =htt​​p://developer.android.com/reference/java/io/Serializable.html> Serializable接口

您可以选择其中之一。这两部作品都相同,但有不同的实现。

Parcelable接口:

如果您选择Parcelable界面,你的 ItemDetails 类必须实现Parcelable。然后,你可以把它看成

  intent.putParcelableArrayListExtra(钥匙,值);
 

和检索它的:

  getIntent()getParcelableArrayListExtra(键)。
 

我不会写你Parcelable实现,因为它需要更多一点的code。这里是很好的例子

Serializable接口:

如果您选择Serializable接口,我建议你创建命名为实例类ItemDetailsWrapper抚慰你的的ArrayList(S)&LT; ItemDetails&GT;

这两种即ItemDetailsWrapper和ItemDetails类必须实现Serializable接口。现在,您可以通过意图通过这样的:

  getIntent()putExtra。(钥匙,&LT; serializableClass&GT;); //存储
。getIntent()getSerializableExtra(钥匙); //检索
 

实施例:

 公共类ItemDetailsWrapper实现Serializable {

    私有静态最后长的serialVersionUID = 1L;
    私人的ArrayList&LT; ItemDetails&GT; itemDetails;

    公共ItemDetailsWrapper(ArrayList中&LT; ItemDetails&GT;项目){
        this.itemDetails =项目;
    }

    公众的ArrayList&LT; ItemDetails&GT; getItemDetails(){
        返回itemDetails;
    }
}

公共类ItemDetails实现Serializable {

    私有静态最后长的serialVersionUID = 1L;

    // getter方法​​,setter方法​​和属性
}
 

和如何通过活动:

  ItemDetailsWrapper包装=新ItemDetailsWrapper(名单);
意图I =新的意图(小于背景&GT中,&lt; targetActivity&GT;);
i.putExtra(目标文件,包装); // i.putExtra(目标文件,新ItemDetailsWrapper(列表));
//检索
ItemDetailsWrapper包=
                    (ItemDetailsWrapper)getIntent()getSerializableExtra(物镜);
ArrayList的&LT; ItemDetails&GT;表= wrap.getItemDetails();
 

I am trying to skip my ArrayList through Intent. But I cannot find what to write in extra? Any get methods I am getting errors like "not applicable for string."

Item Details:

public class ItemDetails {

public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getItemDescription() {
    return itemDescription;
}
public void setItemDescription(String itemDescription) {
    this.itemDescription = itemDescription;
}
public String getPrice() {
    return price;
}
public void setPrice(String price) {
    this.price = price;
}
public int getImageNumber() {
    return imageNumber;
}
public void setImageNumber(int imageNumber) {
    this.imageNumber = imageNumber;
}

public int getVideoNumber() {
    return videoNumber;
}
public void setVideoNumber(int videoNumber) {
    this.videoNumber = videoNumber;
}

public void setChild(ArrayList<ItemDetails> item_child)
{
    this.item_child = item_child;
}
public ArrayList<ItemDetails> getChild()
{
    return this.item_child;
}
public void setParent(ArrayList<ItemDetails> item_parent)
{
    this.item_parent = item_parent;
}
public ArrayList<ItemDetails> getParent()
{
    return this.item_parent;
}



private String name ;
private String itemDescription;
private String price;
private int imageNumber;
private int videoNumber;
private ArrayList<ItemDetails> item_child;
    private ArrayList<ItemDetails> item_parent; 
}

My class:

static class ViewHolder {
    TextView txt_itemName;
    TextView txt_itemDescription;
    TextView txt_itemPrice;
    ImageView itemImage;
    ArrayList<ItemDetails> item_parent;
    ArrayList<ItemDetails> item_child;
}

My putExtra:

intObj.putExtra("exerciselist",obj_itemDetails.getChild());

GetChild function :

public ArrayList<ItemDetails> getChild()
{
   return this.item_child;
}

But I cannot find how am I supposed to write to get arrayList?

ArrayList<ItemDetails> child1 = getIntent().?????????

解决方案

But i cannot find how am ı supposed to write to get arrayList

Short answer: you can't. You can only pass ArrayList<String> and then retrieve it with

getIntent().getStringArrayListExtra("key");


But. If you want to pass custom objects via Intent your objects have to implement:

You can choose one of them. Both works same but have different implementations.

Parcelable interface:

If you choose Parcelable interface, your ItemDetails class have to implement Parcelable. Then you can put it as

intent.putParcelableArrayListExtra("key", value);

and retrieve it as:

getIntent().getParcelableArrayListExtra("key");

I won't write you Parcelable implementation because it requires a little more code. Here is nice example.

Serializable interface:

If you choose Serializable interface i suggest you to create class named for instance ItemDetailsWrapper that will wrap your ArrayList(s)<ItemDetails>

Both i.e. ItemDetailsWrapper and ItemDetails class have to implement Serializable interface. Now you are able to pass it via Intent like this:

getIntent().putExtra("key", <serializableClass>); // storing 
getIntent().getSerializableExtra("key"); // retrieving

Example of implementation:

public class ItemDetailsWrapper implements Serializable {

    private static final long serialVersionUID = 1L;
    private ArrayList<ItemDetails> itemDetails;

    public ItemDetailsWrapper(ArrayList<ItemDetails> items) {
        this.itemDetails = items;
    }

    public ArrayList<ItemDetails> getItemDetails() {
        return itemDetails;
    }
}

public class ItemDetails implements Serializable {

    private static final long serialVersionUID = 1L;

    // getters, setters and properties
}

And how to pass through Activities:

ItemDetailsWrapper wrapper = new ItemDetailsWrapper(list);
Intent i = new Intent(<context>, <targetActivity>);
i.putExtra("obj", wrapper); // i.putExtra("obj", new ItemDetailsWrapper(list));
// retrieving 
ItemDetailsWrapper wrap = 
                    (ItemDetailsWrapper) getIntent().getSerializableExtra("obj");
ArrayList<ItemDetails> list = wrap.getItemDetails();

这篇关于在Java中数组列表意向额外的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆