2017-02-20 34 views
0

我有一個包含清單的回收站視圖。列表中的項目有自己的詳細信息(每個項目都有圖像,ID,名稱,說明),並且項目被分開,而不是按順序排列。如果物品被撕裂,請在回收站視圖中獲取物品的內部詳細信息

實施例:recyclerview物品位置= 0,列表項ID = 7。

recyclerview物品位置= 1,列表項ID = 5

recyclerview物品位置= 2,列表項ID = 12。

所以我需要點擊回收站上的列表項ID。如果我點擊回收站位置= 0,如果我必須將項目ID設置爲7.以便我可以基於該ID在該furthur上工作。

我的示例代碼

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

我正在從服務器的數據,並將其設置到適配器

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

這是我的適配器類

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

} 

我不知道的Onclick方法。所以請根據需要與Onclick事件一起推薦我。

回答

1

裏面的ViewHolder裏面的setOnClickListener是個不錯的方法。

考慮到您當前的解決方案,最簡單的方法是更改​​ClickListener接口,在onBindViewHolder期間將數據放入Holder中,然後在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? 'FeaturedAppsData'的id部分中的 –

+0

? – Budius

+0

其實我正在使用onclick界面提供兩個更多的回收站視圖。因此,在OnClick方法中,如果我返回的是FeaturedAppData數據而不是int值,則在單擊操作時會出現其他兩種回收方法的錯誤。 –

相關問題