Mettez en surbrillance l'élément sélectionné dans un RecyclerView

Je vais avoir des ennuis avec en surbrillance un élément au sein d'un RecyclerView, similaire à la création de l'élément sélectionné dans une liste.

Pour le moment, j'ai mis en place le RecyclerView, ont une valeur par défaut LayoutManager, et avoir une carte qui affiche toutes les données. J'ai tout récemment eu la onClickListener() de travail (bien que je ne suis pas sûr si elle doit aller dans le onCreateViewHolder() ou onBindViewHolder*(- vous ne savez pas quand onBindViewHolder() est appelé).

J'ai essayé de chercher autour, et le plus proche que j'ai reçu est le la question ici. Cependant, je suis complètement perdu dans cette question. Où est ce que onClick() méthode (à l'intérieur de la carte, à l'intérieur du contenant de l'Activité/fragment, etc?). Qu'est ce que viewHolderListener? Qu'est-ce que getPosition() de et pour quoi faire exactement? Essentiellement, j'ai eu nulle part à partir de cette question, et c'était la meilleure ressource que j'ai pu trouver jusqu'à présent.

Voici mon code actuel pour la mise en place de la RecyclerView:

//Sets up the main navigation
private void setupMainNav() {
    //use this setting to improve performance if you know that changes
    //in content do not change the layout size of the RecyclerView
    mMainRecyclerNav.setHasFixedSize(true);

    //use a linear layout manager
    LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
    mMainRecyclerNav.setLayoutManager(layoutManager);

    //Create and set the adapter for this recyclerView
    MainNavAdapter adapter = new MainNavAdapter(getActivity());
    mMainRecyclerNav.setAdapter(adapter);
}

Voici mon code actuel de la carte:

class MainNavAdapter extends RecyclerView.Adapter<MainNavAdapter.ViewHolder> {
Context mContext;
//Holds the titles of every row
String[] rowTitles;
//Default constructor
MainNavAdapter(Context context) {
this.mContext = context;
//Get the rowTitles - the necessary data for now - from resources
rowTitles = context.getResources().getStringArray(R.array.nav_items);
}
//Simple class that holds all the views that need to be reused
class ViewHolder extends RecyclerView.ViewHolder{
View parentView; //The view which holds all the other views
TextView rowTitle; //The title of this item
//Default constructor, itemView holds all the views that need to be saved
public ViewHolder(View itemView) {
super(itemView);
//Save the entire itemView, for setting listeners and usch later
this.parentView = itemView;
//Save the TextView- all that's supported at the moment
this.rowTitle = (TextView) itemView.findViewById(R.id.row_title);
}
}
//Create new views (invoked by the layout manager)
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
//Create the view for this row
View row = LayoutInflater.from(mContext)
.inflate(R.layout.list_navmain_row, viewGroup, false);
//Create a new viewHolder which caches all the views that needs to be saved
ViewHolder viewHolder = new ViewHolder(row);
return viewHolder;
}
//Replace the contents of a view (invoked by the layout manager)
@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
//- get element from your dataset at this position
//- replace the contents of the view with that element
viewHolder.rowTitle.setText(rowTitles[i]);
//TODO: Make a better workaround for passing in the position to the listener
final int position = i;
//Set a listener for this entire view
viewHolder.parentView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getActivity(), "Clicked on row: " + position, Toast.LENGTH_SHORT).show();
}
});
}
//Return the size of your dataset (invoked by the layout manager)
@Override
public int getItemCount() {
return rowTitles.length;
}
}

Je vous serais reconnaissant de toute aide. Merci.

source d'informationauteur MDragon00