Cliquez sur l'élément par programme dans RecyclerView

Je charge une liste de catégories et, selon ce qui est sélectionné, je dois afficher les produits de la catégorie correspondante dans RecyclerView . Donc, lorsque je commence le Fragment je dois simuler l'utilisateur en cliquant dans une catégorie par défaut – dans ce cas, ce serait le premier.

Comment puis-je effectuer cela?

Merci beaucoup d'avance.

3 Solutions collect form web for “Cliquez sur l'élément par programme dans RecyclerView”

Sans votre code, nous ne savons pas comment vous mettez en œuvre votre OnClickListener.

Normalement, vous implémentez et définissez l'élément surClickListener dans le viewHolder de votre RecyclerView.Adapter.
Par exemple: ViewHolder.itemView.setOnClickListener(listener);

Donc, la solution est que vous pouvez utiliser recyclerView.findViewHolderForAdapterPosition(0).itemView.performClick()

PS: N'utilisez pas findViewHolderForLayoutPosition() selon le Doc

Voici une solution de contournement pour sélectionner le 1er enfant de recyclage après avoir configuré l'adaptateur, j'espère que cela vous aidera

 //position to be clicked final int pos = 0; new Handler().postDelayed(new Runnable() { @Override public void run() { recyclerView.findViewHolderForAdapterPosition(pos).itemView.performClick(); } },1); 

prendre plaisir 🙂

Il est mal vu par les puristes d'utiliser la méthode

  recyclerView.findViewHolderForAdapterPosition(pos).itemView.performClick(); 

Comme il le dit dans les documents:

  Return the ViewHolder for the item in the given position of the data set. Unlike * {@link #findViewHolderForLayoutPosition(int)} this method takes into account any pending * adapter changes that may not be reflected to the layout yet. On the other hand, if * {@link Adapter#notifyDataSetChanged()} has been called but the new layout has not been * calculated yet, this method will return <code>null</code> since the new positions of views * are unknown until the layout is calculated. 

Pour la raison exacte, le retardement d'un fil est parfois utile. Tout appel à notifyDataSetChanged () provoque le renvoi nulle. Mieux vaut utiliser la méthode de l'adaptateur surBindViewHolder et vérifier la position 0. Ajustez pour la façon dont vous avez configuré votre auditeur, la manière habituelle est l'exemple ici, créé dans le constructeur ViewHolder. Utilisez une variable d'init pour éviter qu'elle ne soit appelée à nouveau.

  @Override public void onBindViewHolder(FooAdapter.ViewHolder viewHolder, int position) { //code ... //do this last especially if you are using an animator if(position == 0 && isInit) { listener.onItemClick( viewHolder.itemView,0); isInit =false; } } 
coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.