Vous utilisez RecyclerView pour créer un affichage de liste dans le développement d'applications Android, n'est-ce pas? Lorsque vous configurez un bouton sur RecyclerView et que vous passez d'une liste à un autre écran, vous voudrez peut-être savoir ** quel nombre de boutons de la liste a été enfoncé **. Sur RecyclerView.Adapter, "quel bouton numéro a été enfoncé" peut être obtenu assez rapidement, mais j'étais un peu accro à son utilisation dans MainActivity, alors prenez note.
Pour un aperçu, veuillez vous référer à cet article car il était facile à comprendre. Principes de base de RecyclerView
--Je veux placer un bouton sur RecyclerView et changer d'écran lorsque le bouton est enfoncé. --Je souhaite modifier le comportement à la destination de la transition en fonction du nombre de lignes dans la liste où le bouton est enfoncé.
L'image du traitement lorsque le bouton au moment de la transition d'écran est enfoncé est comme ceci. Je voudrais vous dire quelle liste de boutons a été enfoncée pour l'écran de destination de la transition.
En passant, RecyclerView.Adapter n'hérite pas de la classe Activty, donc la transition d'écran n'est pas possible. Par conséquent, il est nécessaire de connaître le numéro de la liste appuyée sur MainActivity et de changer d'écran.
MainActivity
@Override
public void onClick(View view) {
int line = getLine(); //Je veux obtenir le nombre de lignes dans la liste sur laquelle j'ai appuyé d'une manière ou d'une autre
Intent hoge = new Intent(MainActivity.this, HogeActivity.class);
hoge.putExtra("line", line);
startActivity(hoge);
}
Je souhaite traiter sur MainActivity lorsque j'appuie sur le bouton inclus dans RecyclerView. Enregistrez OnClickListener de MainActivity dans l'écouteur de RecyclerView.Adapter. Vous pouvez maintenant définir l'écouteur pour qu'OnClick () sur MainActivty soit appelé lorsque vous appuyez sur un bouton de la liste.
RecyclerAdapter.java
public void setOnItemClickListener(View.OnClickListener listener){
m_listener = listener;
}
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
// - get element from your dataset at this position
// - replace the contents of the view with that element
final int pos = position;
//Lorsque le bouton de la liste est enfoncé, l'écouteur de clic enregistré ci-dessus sera appelé.
holder.m_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
m_listener.onClick(view);
}
});
}
MainActivity.java
RecyclerView.Adapter rAdapter = new RecycleAdapter(data);
rAdapter.setOnItemClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int line = getLine(); //Je veux obtenir le nombre de lignes dans la liste sur laquelle j'ai appuyé d'une manière ou d'une autre
Intent hoge = new Intent(MainActivity.this, HogeActivity.class);
hoge.putExtra("line", line);
startActivity(hoge);
}
});
Dans l'état actuel, le même processus sera exécuté quelle que soit la liste de boutons sur lesquels vous appuyez.
RecyclerView.Adapter a une méthode appelée ʻonBindViewHolder`. C'est la méthode qui sera appelée chaque fois qu'un élément de liste est créé. Et l'argument «position» représente le numéro exact de la liste créée.
** Implémenter pour enregistrer la valeur de cette position dans la variable membre de RecyclerView dans l'écouteur de clic du bouton de la liste. ** ** ** En faisant cela, lorsque le bouton est enfoncé, la valeur du nombre de lignes sera enregistrée dans la variable membre (m_line) de RecycleViewAdapter. ** **
Ensuite, créez une méthode qui peut faire référence à la m_line
de l'extérieur, et implémentez-la pour qu'elle soit appelée dans OnClick () de MainActivity.
Après cela, c'est OK si vous obtenez la valeur avec HogeActivity
de la destination de la transition et modifiez le traitement en conséquence.
RecyclerAdapter.java
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
// - get element from your dataset at this position
// - replace the contents of the view with that element
final int pos = position;
holder.m_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
m_line = pos; //Enregistrer le nombre de lignes
m_listener.onClick(view); //Appelez Main OnClick immédiatement après l'enregistrement
}
});
}
public int getLine(){
return m_line; //Obtenez le nombre de lignes
}
MainActivity.java
final RecyclerView.Adapter rAdapter = new RecycleAdapter(list);
recyclerView.setAdapter(rAdapter);
((RecycleAdapter) rAdapter).setOnItemClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int line = ((RecycleAdapter) rAdapter).getLine(); //Ici m_Obtenez la valeur de la ligne
Intent edit = new Intent(MainActivity.this, HogeActivity.class);
edit.putExtra("line", line);
startActivity(edit);
}
});
C'est une sorte d'implémentation très détournée, Je n'ai pu trouver que cette façon de dire à l'activité principale le nombre de lignes sur lesquelles j'ai appuyé, alors j'ai fini avec cette implémentation. S'il y a quelque chose comme "Non, si vous faites hogehoge sans faire cela, ce sera un coup ...", apprenez-moi.
Depuis que j'ai extrait le code de l'application que j'ai créée et que j'ai un peu modifié, les noms de variables dans le texte et le code source peuvent ne pas correspondre. Veuillez le convertir dans le cerveau.
Recommended Posts