2016-06-28 3 views
0

API呼び出しのデータリストがRecyclerViewにあります。私はitemClickListenerインターフェイスを持っていて、アイテムイメージと詳細を含む新しいフラグメントを開きます。itemClickListenerを使用してAPI呼び出しから別のフラグメントにデータを渡す

アイテムをクリックすると、2番目のフラグメントとそのアダプタにデータを渡す必要があります。どのように機能するのですか?

このデータをバンドルで送信し、次に2番目のフラグメント内で別のAPI呼び出しを行う必要がありますか?または、私は追加のAPI呼び出しなしで使用できるデータを持つバンドルだけですか?

これは私のモデルである:

public class Products { 

    private String productId; 
    private String productName; 
    private String shortDescription; 
    private String longDescription; 
    private String price; 
    @SerializedName("productImage") 
    private String image; 
    @SerializedName("reviewRating") 
    private double rating; 
    private int reviewCount; 
    private boolean inStock; 

    public String getProductId() { 
     return productId; 
    } 

    public String getProductName() { 
     return productName; 
    } 

    public String getShortDescription() { 
     return shortDescription; 
    } 

    public String getLongDescription() { 
     return longDescription; 
    } 

    public String getPrice() { 
     return price; 
    } 

    public String getImage() { 
     return image; 
    } 

    public double getRating() { 
     return rating; 
    } 

    public int getReviewCount() { 
     return reviewCount; 
    } 

    public boolean isInStock() { 
     return inStock; 
    } 
} 

は、これが私のMainFragmentです:

private void setBundle(int position) { 
    args = new Bundle(); 
    String[] clickedItem = {apiProducts.get(position).getImage(), 
      apiProducts.get(position).getLongDescription(), 
      String.valueOf(apiProducts.get(position).isInStock())}; 
    args.putStringArray("Item", clickedItem); 
} 

private void productsClickListener() { 

    if (apiObjectAdapter != null) { 

     apiObjectAdapter.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(View itemView, int position) { 

       setBundle(position); 
       setDetailsFragment(args); 
      } 
     }); 
    } 

} 

マイアダプタ:バンドル フォームの送信者を使用して

public class ApiObjectAdapter extends RecyclerView.Adapter<ApiObjectAdapter.MyViewHolder> { 

public void setOnItemClickListener(OnItemClickListener listener) { 
    this.listener = listener; 
} 

public class MyViewHolder extends RecyclerView.ViewHolder { 
    @BindView(R.id.product_name) 
    public TextView name; 
    @BindView(R.id.product_rating) 
    public TextView rating; 
    @BindView(R.id.product_price) 
    public TextView price; 


    public MyViewHolder(final View view) { 
     super(view); 
     this.parentView = view; 

     try { 
      ButterKnife.bind(this, view); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     view.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (listener != null) 
        listener.onItemClick(view, getLayoutPosition()); 
      } 
     }); 
    } 
} 

答えて

0

としてデータを置きます

し、次の受信機で

Bundle bundle = this.getArguments(); 
int myInt = bundle.getInt(key, defaultValue); 

詳細についてhttps://developer.android.com/reference/android/os/Bundle.html

+0

私は私のバンドルにint型を送っていないよと受け取ります。 String imageURLとString descriptionを送信する必要があります。代わりにparseableを使うべきですか? – MikeB

+0

また、parcelableを使用することもできますが、productIdを送信してから、細かい製品の詳細を取得する方が良いでしょう。 –

+0

このような情報を入力することもできます。bundle.putString(String key、String value); bundle.putString( "imageURL"、 "http://myurls.com/imag.png"); bundle.putString( "description "、"テスト製品 "); –

関連する問題