Je n'ai pas trouvé d'article sur la façon d'afficher un menu contextuel qui modifie le contenu de chaque élément en appuyant longuement sur l'élément dans RecyclerView, je vais donc prendre une note!
↓ Image de fin ↓
Pour activité ou fragment
View.OnCreateContextMenuListener
Met en oeuvre.
SampleFragment.java
public class SampleFragment extends Fragment
implements View.OnCreateContextMenuListener {
Il existe d'autres modèles à implémenter dans ViewHolder, Je voulais séparer le contenu du menu contextuel pour chaque élément, donc je l'ai implémenté dans un fragment pratique.
Ensuite, dans la méthode onCreatedView qui crée le RecyclerView
SampleFragment.java
RecyclerView rv = view.findViewById(R.id.recyclerView);
//La fixation de l'adaptateur, etc. est omise
registerForContextMenu(rv); //Postscript
Sera ajouté.
registerForContextMenu
peut être appelé en implémentant View.OnCreateContextMenuListener.
Vous pouvez rendre le menu contextuel reconnu par cette description.
Ensuite, implémentez ʻonCreateContextMenu` dans Fragment.
SampleFragment.java
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
//Obtenez la position du message pressé et
//Traiter comme l'index de la liste affichée dans RecyclerView
//Acquérir l'ID utilisateur et réaliser la distribution des menus
if (list.get(adapter.getPosition()).getUserId() == loginUserId) {
menu.add(Menu.NONE, 1, Menu.NONE, "copie");
menu.add(Menu.NONE, 2, Menu.NONE, "Éditer");
menu.add(Menu.NONE, 3, Menu.NONE, "Effacer");
} else {
menu.add(Menu.NONE, 1, Menu.NONE, "copie");
}
}
Vous pouvez facilement ajouter des éléments en ajoutant le contenu que vous souhaitez ajouter à l'objet ContextMenu.
Une valeur numérique est définie dans le deuxième argument de la méthode add, qui est utilisée dans la gestion de l'écouteur lorsqu'il est pressé.
Pour référence uniquement, la méthode getPosition ()
est fournie dans l'adaptateur comme suit afin que la position de l'élément pressé longtemps puisse être obtenue.
Adapter.java
@Override
public void onBindViewHolder(final ChatViewHolder holder, int position) {
//réduction
holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
setPosition(holder.getPosition());
return false;
}
});
}
//Obtenez la position de l'élément pressé longtemps
public int getPosition() {
return position;
}
//Définir la position de l'élément pressé longuement
public void setPosition(int position) {
this.position = position;
}
Avec l'implémentation jusqu'à présent, le menu contextuel peut être affiché.
Implémentez ʻonContextItemSelected` et gérez-le en utilisant l'instruction switch comme indiqué ci-dessous. Puisque vous pouvez obtenir la valeur numérique pour distinguer chaque élément enregistré précédemment avec MenuItem.getItemId (), Cela ressemble à un tri avec une instruction switch.
SampleFragment.java
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case 1:
//Copier le message TODO dans le presse-papiers
return true;
case 2:
//Modifier le message TODO
return true;
case 3:
//Supprimer le message TODO
return true;
default:
return false;
}
}
c'est tout.
J'espère que ça aide quelqu'un! !!
Recommended Posts