0
votes

Méthode onBind de l'adaptateur RecyclerView

J'ai dans ma MainActivity 3 RecyclerViews.

L'une d'elles dans une feuille du bas et c'est la principale (par défaut la feuille du bas est ouverte pour afficher celle-ci), dans sa méthode onbind de l'adaptateur J'ai créé un onClickListener afin que je souhaite que lorsque l'utilisateur clique sur un élément qu'il contient,

Je Si vous souhaitez revenir à la classe d'activité principale pour définir Pour démarrer une méthode , vous devez fermer la feuille inférieure et définir les données pour la prochaine vue de recyclage (qui apparaîtra lorsque la feuille inférieure est fermée )

..... Le problème ici est de savoir comment démarrer cette méthode à partir du Listener de la méthode onBind et lui donner un paramètre de ce viewHolder comme son nom et certains de ses attributs

s'il y a quelque chose qui n'est pas clair, merci de me le faire savoir

@Override
public void onBindViewHolder(@NonNull final ViewHolder viewHolder, final int position) {

        viewHolder.categoryImage.setImageResource(mRowOfCategories.get(position).getCategoryImage());
        viewHolder.categoryName.setText(mRowOfCategories.get(position).getCategoryName());
        viewHolder.mCardView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


            }
        });


    }


1 commentaires

Meilleure et simple manière de créer une interface publique et de l'implémenter dans Activity et de créer un setter dans Adapter, puis un objet d'écoute utilisateur onClick pour renvoyer un rappel à Activity pour effectuer une opération spécifique.


4 Réponses :


0
votes

Vous pouvez le faire facilement.

Définissez une interface personnalisée

 public void InitAdapter()
{

  yourAdapter = new Adapter(); // bloa bla bla   
  yourAdapter.setListener(new CustomEventListener()  {
      public void MyEventListener(String message)
      {
           // then do what you want
      }   
 }
}

Dans votre classe d'adaptateur

 public Adapter ......... {

        private CustomEventListener listener;

        public void setListener(CustomEventListener listener)
        { 
            this.listener = listener;
        }

        //Your onBind
       Override
public void onBindViewHolder(@NonNull final ViewHolder viewHolder, final int position) {

        viewHolder.categoryImage.setImageResource(mRowOfCategories.get(position).getCategoryImage());
        viewHolder.categoryName.setText(mRowOfCategories.get(position).getCategoryName());
        viewHolder.mCardView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                  if (listener != null)
                        listener.MyEventListener("Message");
            }
        });    
    }

}

Dans votre Activité lors de la création de l'adaptateur ajouter ce code

public Interface CustomEventListener 
{
     public void MyEventListener(String message); //you can change parameters
}


0 commentaires

0
votes

Vous devez utiliser Listener pour gérer le clic dans votre adaptateur quelque chose comme ceci:

adapter.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(View view, int position) {

       // do something with the view and position.
    }
});

puis appeler l'auditeur avec:

@Override
public void onBindViewHolder(@NonNull final ViewHolder viewHolder, final int position) {

    ...

    viewHolder.mCardView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
           // call the listener.
           mListener.onItemClick(v, viewHolder.getAdapterPosition());
        }
    });
}

puis lorsque vous utilisez l'adaptateur, définissez l'auditeur avec quelque chose comme ceci:

private OnItemClickListener mListener;

public interface OnItemClickListener {
    void onItemClick(View view, int position);
}

public void setOnItemClickListener(OnItemClickListener listener) {
    this.listener = listener;
}


0 commentaires

0
votes

Le plus simple:

Vous déclarez la méthode que vous souhaitez appeler dans votre activité. Elle doit être publique:

MyActivity mActivity=(MyActivity)activity;
mActivity.method();

Ensuite, dans le constructeur de l'adaptateur, vous passez une référence à l'activité en tant que paramètre:

public MyAdapter(Activity activity){}


0 commentaires

0
votes

Vous voulez que vos recyclages soient conscients les uns des autres. Vous aurez besoin d'une classe, peut-être MainActivity, qui conservera la valeur sélectionnée, et l'effacera également sur demande, entre les recycleviews. Ensuite, vous aurez besoin de cette valeur pour propager la prochaine vue de recyclage. Si vous voulez être efficace, vous utiliserez une vue de recyclage et échangerez les données entre les sélections, et vous l'animerez pour qu'elle ressemble à une nouvelle vue de recyclage est créée.


0 commentaires