11

をスキップしようとしていArrayListますIntent。しかし、私は余分に何を書くべきかを見つけることができませんか? 「文字列には適用できません」などのエラーが表示されます。

アイテムの詳細:

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

私のクラス:

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

私のプットエクストラ:

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

GetChild 関数 :

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

しかし、arrayListを取得するためにどのように書くべきかわかりませんか?

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

1 に答える 1

28

しかし、arrayListを取得するためにどのように書くべきかわかりません

簡単な答え: できません。渡すだけArrayList<String>で取得できます

getIntent().getStringArrayListExtra("key");


しかし。Intent を介してカスタム オブジェクトを渡したい場合は、オブジェクトを実装する必要があります。

そのうちの 1 つを選択できます。どちらも同じように機能しますが、実装が異なります。

パーセル可能なインターフェース:

Parcelable インターフェイスを選択した場合、ItemDetailsクラスは Parcelable を実装する必要があります。次に、次のように置くことができます

intent.putParcelableArrayListExtra("key", value);

次のように取得します。

getIntent().getParcelableArrayListExtra("key");

もう少しコードが必要なので、Parcelable の実装については書きません。ここに良い例があります。

シリアライズ可能なインターフェース:

Serializable インターフェイスを選択した場合は、インスタンス ItemDetailsWrapper をラップするという名前のクラスを作成することをお勧めしますArrayList(s)<ItemDetails>

つまり、ItemDetailsWrapper と ItemDetails クラスの両方が Serializable インターフェイスを実装する必要があります。これで、次のように Intent を介して渡すことができます。

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

実装例:

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
}

アクティビティを通過する方法:

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();
于 2013-03-31T15:38:19.350 に答える