2017-02-20 2 views
0

リサイクルビューはリストで構成されています。リスト内のアイテムには、このような独自の詳細があります(各アイテムにはイメージ、ID、名前、説明が含まれます)。アイテムは順不同でシャッフルされます。アイテムがシャッフルされている場合、リサイクラビューのアイテムの内部詳細を取得します

例:recyclerview項目位置= 0、リストアイテムID = 7

recyclerview項目位置= 1、リストアイテムID = 5

recyclerview項目位置= 2、リストアイテムID = 12。

だから、クリック時にリサイクル業者のリストアイテムIDを取得する必要があります。私がrecyclerviewの位置= 0をクリックすると、アイテムIDを7にしなければならない。そのIDに基づいてそのぼかしを処理できるようにする。

私のサンプルコードは、これは私のアダプタクラス

public class RecommendedAdapter extends RecyclerView.Adapter<RecommendedAdapter.ItemViewHolder> { 

private LayoutInflater inflater = null; 
private Context context; 
private List<FeaturedAppsData> itemsData; 
private ClickListener clicklistener = null; 
public TextView recommendedAppTitle,recommendedAppCategory,recommendedAppDescription; 
public ImageView recommendedAppIcon; 
Button recommendedBtn; 
String appId; 

public void setClickListener(ClickListener clickListener) { 
    this.clicklistener = clickListener; 
} 

public RecommendedAdapter(Context context, List<FeaturedAppsData> itemsData) { 
    this.context = context; 
    this.itemsData = itemsData; 
} 

@Override 
public void onBindViewHolder(ItemViewHolder holder, int position) { 
    holder.recommendedAppTitle.setText(itemsData.get(position).getName()); 
    holder.recommendedAppCategory.setText(itemsData.get(position).getApp_description()); 
    holder.recommendedAppDescription.setText(itemsData.get(position).getOffer_description()); 
    holder.recommendedAppBtn.setText(itemsData.get(position).getButton_text()); 
    String imageUrl = String.valueOf(itemsData.get(position).getImage().getUrl()); 
    Glide.with(context).load(ApiConstant.ApiBaseUrl + imageUrl).into(recommendedAppIcon); 
    appId=itemsData.get(position).getId(); 

} 

@Override 
public int getItemCount() { 
    int size = 0; 
    if (itemsData != null && itemsData.size() > 0) { 
     size = itemsData.size(); 

    } 
    return size; 
} 

public class ItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 

    public TextView recommendedAppTitle,recommendedAppCategory,recommendedAppDescription,offerDescription,offerDetailDescription,rewardDetail; 
    public ImageView recommendedAppIcon; 
    public Button recommendedAppBtn; 
    public ArrayList<FeaturedAppsData> dataItems; 
    private Context context; 

    public ItemViewHolder(Context context, View itemView, int viewType) { 
     super(itemView); 
     this.context = context; 
     itemView.setOnClickListener(this); 

     recommendedAppTitle = (TextView) itemView.findViewById(R.id.recommended_app_title); 
     recommendedAppCategory = (TextView) itemView.findViewById(R.id.recommended_app_category); 
     recommendedAppDescription = (TextView) itemView.findViewById(R.id.recommended_app_description); 
     recommendedAppIcon = (ImageView) itemView.findViewById(R.id.recommended_app_icon); 
     recommendedAppBtn=(Button)itemView.findViewById(R.id.recommended_app_card_btn); 
    } 

    @Override 
    public void onClick(View v) { 

     if (clicklistener != null) { 
      clicklistener.itemClicked(v, getAdapterPosition()); 
     } 
    } 
} 


@Override 
public ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view = null; 
    inflater = LayoutInflater.from(context); 
    view = inflater.inflate(R.layout.recommended_item_layout, parent, false); 
    recommendedAppIcon=(ImageView)view.findViewById(R.id.recommended_app_icon); 

    return new ItemViewHolder(context, view, viewType); 
} 

} 

である私は、サーバーからデータを取得し、

setrecommendedAppsContent(response.body().getData()); 

    public void setrecommendedAppsContent(List<FeaturedAppsData> data){ 
    if (data!=null&&data.size()>0) { 
     recommendedAdapter = new RecommendedAdapter(mCurrentContext, data); 
     recommendedrecyclerView.setAdapter(recommendedAdapter); 
     recommendedAdapter.setClickListener(this); 
    } 
} 

をアダプタに設定しています

recommendedrecyclerView=(RecyclerView)view.findViewById(R.id.recommended_recycler_view); 
    recommendedrecyclerView.setNestedScrollingEnabled(false); 
    recommendedrecyclerView.setLayoutManager(new LinearLayoutManager(getActivity(),OrientationHelper.VERTICAL,true)); 
    recommendedrecyclerView.setItemAnimator(new DefaultItemAnimator()); 

である私はのわかりませんOnclickメソッド。だからOnclickイベントに沿って必要に応じて私を提案してください。

答えて

1

ViewHolder内のsetOnClickListenerは良い方法です。

最も簡単な方法は、ClickListenerインターフェイスを変更し、onBindViewHolderの間にホルダー内にデータを入れてからonClickの間にリスナーに渡すことです。

変更ビューホルダーフィールドへ:

public class ItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 

    public TextView recommendedAppTitle,recommendedAppCategory,recommendedAppDescription,offerDescription,offerDetailDescription,rewardDetail; 
    public ImageView recommendedAppIcon; 
    public Button recommendedAppBtn; 
    public FeaturedAppsData data; // <<< ADD THIS 
    // remove that u don't need public ArrayList<FeaturedAppsData> dataItems; 
    // remove that u don't need private Context context; 
    ... the rest of your holder 

その後、onBindViewHolder

内部
@Override 
public void onBindViewHolder(ItemViewHolder holder, int position) { 
    holder.data = itemsData.get(position); 
    ... the rest on bind 

そしてonClick内部に、ホルダー内側:

@Override 
public void onClick(View v) { 

    if (clicklistener != null) { 
     clicklistener.itemClicked(v, data.getId()); 
    } 
} 
+0

ので、これでどのようにすることができます。このようアイテムIDを取得できますか? –

+0

'FeaturedAppsData'のID部分の内側にありますか? – Budius

+0

実際に私は2つのリサイクラビューのためにonclickインターフェイスを使用しています。したがって、OnClickメソッドで、int値の代わりにFeaturedAppDataデータを返す場合、クリックアクションで他の2つのリサイクルメソッドのエラーが発生しています。 –

関連する問題