RecyclerView OnClick ne fonctionne pas
J'ai fait une horizontale recyclerview à l'intérieur d'un fragment. Maintenant, quand je clique sur n'importe quel élément je ne vois pas l'écouteur de clics de travail. Voici mon code pour la classe d'Adaptateur:
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);
}
}
Je pense que je ne reçois pas comment utiliser la vue titulaire correctement. Alors que j'ai utilisé le même code pour recyclerView dans un autre et qu'il fonctionne comme un charme.
N'est-il pas de tir, ou est-il juste de tir de manière incorrecte. Vous devriez être en paramètre le onClick au cours de la bindViewHolder() puisque vous n'créer la vue titulaire une fois d'abord, puis "recycler" quand la liste est déroulée.
ce n'est pas à feu.
Est l'arrière-plan de la vue unset? également ajouter un toast pour le débogage.
voir ce stackoverflow.com/a/24933117/4146722
ce n'est pas à feu.
Est l'arrière-plan de la vue unset? également ajouter un toast pour le débogage.
voir ce stackoverflow.com/a/24933117/4146722
OriginalL'auteur Akshay Bhasin | 2016-02-23
Vous devez vous connecter pour publier un commentaire.
1.Simple Cliquez sur Gestionnaire au sein de
ViewHolder
RecyclerView
n'a pas de dispositions spéciales pour la fixation sur des gestionnaires d', contrairementListView
qui a la méthodesetOnItemClickListener()
. Pour obtenir un effet similaire, nous pouvons nous joindre cliquez sur les événements dans leViewHolder
au sein de notre carte:Une autre façon est ma manière préférée.. mais c'est aussi un bon moyen d'aller à ce sujet.
Mon onBindViewHolder
Mon niveau de classe (objet de la Carte de Vue.OnClickListner)
donc, fondamentalement, joindre l'auditeur à tout point de vue dans votre support (j'ai essayer de le mettre sur conteneur uniquement), puis l'extraire sur le
onclick
et la position des poignées etc.c'est pourquoi j'ai été taper l'autre façon dont mon préféré :), essayez ceci @AkshayBhasin
qu'est-ce que ce rlContainer?
il est en fait un conteneur de la viewHolder... c'est à dire:<RelativeLayout><TextView><ImageView></RelativeLayout>.....je viens donc ci-joint un id et voila le parent devient mon conteneur pour le point de vue qui est utilisé par mon adaptateur, vous pouvez pour l'instant, juste l'attacher à votre priceView ou TextView.
Je suis assez sûr que vous devez avoir oublié de fixer l'écouteur de clics. C'est la ligne que vous devez avoir raté cette ligne: itemView.setOnClickListener(this);
OriginalL'auteur yUdoDis
Apporter les modifications suivantes à votre Carte:
Afficher le code pour le MainActivity où vous définissez votre Carte
Vérifier la mise à jour de Réponse
hey pourquoi avez-vous passer le itemClickListener à la carte? Sa donne une erreur.
OriginalL'auteur Veeresh Charantimath
Dans ‘CustomViewHolder "en dessous" de super(à vue) " ajouter
vue.setOnClickListener(this)
Vous avez terminé
Devrait fonctionner.
OriginalL'auteur