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 la RecyclerView
. Ainsi, lorsque je lance pour la première fois la 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?
Sans votre code, nous ne savons pas comment vous implémentez votre onClickListener.
Normalement, vous implémentez et définissez l'élément onClickListener 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: Ne pas utiliser findViewHolderForLayoutPosition()
selon le Doc
Voici une solution de contournement pour sélectionner le 1er enfant de RecyclerView
après le réglage de l’adaptateur.
//position to be clicked
final int pos = 0;
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
recyclerView.findViewHolderForAdapterPosition(pos).itemView.performClick();
}
},1);
Il est désapprouvé par les puristes d’utiliser cette méthode.
recyclerView.findViewHolderForAdapterPosition(pos).itemView.performClick();
comme il est dit dans docs:
Renvoie le ViewHolder pour l'élément à la position donnée du jeu de données. Contrairement à {@link #findViewHolderForLayoutPosition (int)}, cette méthode prend en compte toutes les modifications en attente de l'adaptateur qui peuvent ne pas encore être reflétées dans la présentation. Par contre, si {@link Adapter # notifyDataSetChanged ()} a été appelé mais que la nouvelle présentation n'a pas encore été calculée, cette méthode renverra
null
car les nouvelles positions des vues sont inconnues jusqu'à ce que la présentation soit calculée . pour exactement la raison pour laquelle retarder avec un fil est parfois utile. Tout appel à notifyDataSetChanged () le renvoie à null. Il est préférable d’utiliser la méthode onBindViewHolder de l’adaptateur et de vérifier la position 0. Ajustez la manière dont vous avez configuré votre écouteur. La méthode habituellement est donnée ici, créée dans le constructeur ViewHolder. Utilisez une variable init pour empêcher son rappel:
@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;
}
}
si vous voulez cliquer sur une vue particulière dans une rangée à la position, utilisez
recyclerView.findViewHolderForAdapterPosition(pos).itemView.findViewById(R.id.view_id).performClick();