RecyclerView OnClick funktioniert nicht
Ich habe eine horizontale recyclerview innen ein fragment. Wenn ich nun auf für eine Sache, die ich nicht sehen, die auf Klick-listener arbeiten. Hier ist mein code für die Adapter-Klasse:
public class FeaturedProductsAdapter extends RecyclerView.Adapter<FeaturedProductsAdapter.CustomViewHolder> {
private List<FeaturedProductInfo> feedItemList;
private Context mContext;
public FeaturedProductsAdapter(Context context, List<FeaturedProductInfo> feedItemList) {
this.feedItemList = feedItemList;
this.mContext = context;
}
public class CustomViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
protected ImageView imageView;
protected TextView textView,priceView;
private Context context;
public CustomViewHolder(View view,Context context) {
super(view);
this.context=context;
this.imageView = (ImageView) view.findViewById(R.id.thumbnail);
this.textView = (TextView) view.findViewById(R.id.prodTitle);
this.priceView = (TextView) view.findViewById(R.id.prodPrice);
view.setOnClickListener(this);
}
@Override
public void onClick(View view) {
int position = getLayoutPosition(); //gets item position
Log.e("Check", position + "");
FeaturedProductInfo user = feedItemList.get(position);//[position];
//We can access the data within the views
Intent intent = new Intent(context, ProductDescription.class);
intent.putExtra("id", user.getId());
mContext.startActivity(intent);
}
}
@Override
public CustomViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(mContext).inflate(R.layout.featured_product_list_item_card, null);
Context context = viewGroup.getContext();
CustomViewHolder viewHolder = new CustomViewHolder(view,context);
return viewHolder;
}
@Override
public void onBindViewHolder(CustomViewHolder customViewHolder, int i) {
FeaturedProductInfo feedItem = feedItemList.get(i);
//Download image using picasso library
if(!feedItem.getUrl().contains("."))
{
feedItem.setUrl("nothing");
}
Picasso.with(mContext).load(feedItem.getUrl())
.error(R.drawable.unavailable)
.placeholder(R.drawable.unavailable)
.resize(110,110)
.into(customViewHolder.imageView);
//Setting text view title
customViewHolder.textView.setText(feedItem.getTitle());
customViewHolder.priceView.setText(feedItem.getPrice());
//Log.e("Featured: ","SET");
}
@Override
public int getItemCount() {
return (null != feedItemList ? feedItemList.size() : 0);
}
}
Ich denke, ich bin nicht immer, wie der view-Halter richtig. Ich habe zwar verwendet den gleichen code für recyclerView in anderen Tätigkeiten, und es funktioniert wie Charme.
Ist es nicht auslösen überhaupt oder ist es nur brennen falsch. Sie sollten die Einstellung der onClick während der bindViewHolder (), da Sie nur die Sicht Halter zunächst einmal und dann "Papierkorb", wenn die Liste gescrollt wird.
seine gar nicht feuern.
Ist der hintergrund der anzeigen unset? fügen Sie auch einen toast für debug.
finden Sie diese stackoverflow.com/a/24933117/4146722
seine gar nicht feuern.
Ist der hintergrund der anzeigen unset? fügen Sie auch einen toast für debug.
finden Sie diese stackoverflow.com/a/24933117/4146722
InformationsquelleAutor Akshay Bhasin | 2016-02-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
1.Einfache Click-Handler innerhalb
ViewHolder
RecyclerView
keine besonderen Bestimmungen für die Befestigung click-Handler, um Elemente, die im Gegensatz zuListView
hat die MethodesetOnItemClickListener()
. Einen ähnlichen Effekt zu erzielen, können wir anfügen, klicken Sie auf Ereignisse innerhalb derViewHolder
innerhalb unserer adapter:Anderen Weg ist mein bevorzugter Weg ist.. aber das ist auch eine feine Weise, darüber zu gehen.
Meine onBindViewHolder
Meiner Klasse (Adapter-Objekt Anzeigen.OnClickListner)
also im Grunde befestigen Sie die Zuhörer zu einer beliebigen Ansicht in Ihrem Halter (ich versuche es auf den container), dann entpacken Sie es heraus auf der
onclick
- und Griffpositionen etc.das ist, warum ich war die Eingabe, die andere Weise, meine bevorzugte Weise :), das ausprobieren @AkshayBhasin
was ist das rlContainer?
es ist im Grunde ein container, der viewHolder... ie:<RelativeLayout><TextView><Bildansicht></RelativeLayout>.....also habe ich nur angebracht, eine id und voila der Eltern wird mein container für die Ansicht ein, die verwendet wird, von meinem adapter, kann für jetzt nur noch Anhängen, dass zu Ihrer priceView oder TextView.
Ich bin ziemlich sicher, Sie müssen vergessen haben, fügen Sie das Klick-listener. Dies ist die Zeile, die Sie müssen haben verpasst diese Zeile: itemView.setOnClickListener(this);
InformationsquelleAutor yUdoDis
Machen Sie die folgenden änderungen an Ihrem Adapter:
Zeige code der MainActivity wo Sie Ihre Adapter
Überprüfen Sie die aktualisierte Antwort
hey, warum hast du pass die itemClickListener an den adapter? Seine Angabe ist ein Fehler.
InformationsquelleAutor Veeresh Charantimath
In 'CustomViewHolder' unten 'super(view)" hinzufügen
Blick.setOnClickListener(this)
Du fertig bist
Sollte funktionieren.
InformationsquelleAutor