2016-09-11 8 views
0

私はParcelableを実装している製品クラスがあります。このクラスには、これらの画像パスがstrings.xmlに保持する画像がいくつかあります。私は製品オブジェクトを別のアクティビティに持っていますが、イメージリソースの変更はあります。だから、私はResourcesNotFoundExceptionsを取得します。パーセル可能な変更のリソースIDは、

ここに私のstrings.xml

<string-array name="prod_images"> 
    <item>@drawable/sample_product_one</item> 
    <item>@drawable/sample_product_two</item> 
    <item>@drawable/sample_product_three</item> 
    <item>@drawable/sample_product_four</item> 
</string-array> 

マイProduct.javaクラス。

public class Product implements Parcelable { 

private int productId; 
private int productImage; 
private String productTitle; 
private String productPrice; 

public Product() { 
} 

public int getProductImage() { 
    return productImage; 
} 

public void setProductImage(int productImage) { 
    this.productImage = productImage; 
} 

public String getProductTitle() { 
    return productTitle; 
} 

public void setProductTitle(String productTitle) { 
    this.productTitle = productTitle; 
} 

public String getProductPrice() { 
    return productPrice; 
} 

public void setProductPrice(String productPrice) { 
    this.productPrice = productPrice; 
} 

public int getProductId() { 
    return productId; 
} 

public void setProductId(int productId) { 
    this.productId = productId; 
} 

// Parcelling part 
public Product(Parcel in){ 
    this.productTitle = in.readString(); 
    this.productPrice = in.readString(); 
    this.productId = in.readInt(); 
    this.productImage = in.readInt(); 
} 


@Override 
public int describeContents() { 
    return 0; 
} 

@Override 
public void writeToParcel(Parcel dest, int flags) { 
    dest.writeInt(this.productId); 
    dest.writeInt(this.productImage); 
    dest.writeString(this.productTitle); 
    dest.writeString(this.productPrice); 
} 

public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { 
    public Product createFromParcel(Parcel in) { 
     return new Product(in); 
    } 

    public Product[] newArray(int size) { 
     return new Product[size]; 
    } 
}; 
} 

私は画像リソースを取得するためにtypedarrayを使用します。

private void getProductResources() { 
    typedArrayImages = getActivity().getResources().obtainTypedArray(R.array.prod_images); 
    prodTitles = getActivity().getResources().getStringArray(R.array.prod_titles); 
    prodPrices = getActivity().getResources().getStringArray(R.array.prod_prices); 
} 

private void getProductList() { 
    for (int i = 0; i < 4; i++) { 
     int rand_index = random.nextInt(4); 
     Product product = new Product(); 
     product.setProductImage(typedArrayImages.getResourceId(rand_index, -1)); 
     product.setProductPrice(prodPrices[rand_index]); 
     product.setProductTitle(prodTitles[rand_index]); 
     product.setProductId(prodIds[rand_index]); 
     this.product.add(product); 
    } 
    typedArrayImages.recycle(); 
    mainPageAdapter.notifyDataSetChanged(); 
} 

私はrecyclerviewの画像をクリックして、パーセルブルオブジェクトで別のアクティビティを取得します。

 mRecyclerView.addOnItemTouchListener(new RecyclerTouchListener(getActivity(), mRecyclerView, new RecyclerTouchListener.ClickListener() { 
     @Override 
     public void onClick(View view, int position) { 
      if(position != 0){ 
       Intent i = new Intent(); 
       Bundle b = new Bundle(); 
       b.putParcelable("Product", product.get(position - 1)); 
       i.putExtras(b); 
       i.setClass(getActivity(), ProductActivity.class); 
       Log.i("PRODUCT", product.get(position - 1).getProductImage() + ""); 
       startActivity(i); 
      } 
     } 

私はset imageリソースでResourceNotFoundExceptionを持っています。イメージをクリックする前後にリソースイメージを記録することができます。画像リソースが変更されます。

productTitle.setText(product.getProductTitle()); 
    productCost.setText(product.getProductPrice()); 
    //Different image resources 
    Log.i("PRODUCT", product.getProductImage() + ""); 
    //ResourcesNotFoundExceptions 
    productImg.setImageResource(product.getProductImage()); 

答えて

4

同じ順序で読み書きする必要があります。あなたが感謝を、2つのintを書いた後、二つの文字列

dest.writeInt(this.productId); 
dest.writeInt(this.productImage); 
dest.writeString(this.productTitle); 
dest.writeString(this.productPrice); 

しかし、あなたは2つの文字列を読んで、その後、2つのint

this.productTitle = in.readString(); 
this.productPrice = in.readString(); 
this.productId = in.readInt(); 
this.productImage = in.readInt(); 
+0

、それが動作するようになりました。 – abalta

関連する問題