Метод onBind адаптера RecyclerView

У меня в MainActivity 3 RecyclerViews.

Один из них находится на нижнем листе, и он является основным (по умолчанию нижний лист открыт для отображения этого), в его методе onbind адаптера я сделал < strong>onClickListener, чтобы я хотел, чтобы, когда пользователь нажимает на элемент в нем,

Я хочу вернуться к основному классу активности, чтобы установить для запуска метод, который свернут, чтобы закрыть нижний лист и установить данные для следующего представления повторного использования (которое появится, когда нижний лист закрыто)

..... Проблема здесь в том, как запустить этот метод из прослушивателя метода onBind и дать ему параметр из этого viewHolder в качестве его имени и некоторых его атрибутов.

если есть что-то не ясно, пожалуйста, дайте мне знать

@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) {


            }
        });


    }

person Abdalla Yasser    schedule 15.03.2019    source источник
comment
Лучший и простой способ создать общедоступный интерфейс и реализовать его в Activity и создать установщик в адаптере, а затем объект прослушивателя пользователя onClick для отправки обратного вызова в Activity для выполнения конкретной операции.   -  person Asad Mukhtar    schedule 29.10.2019


Ответы (4)


Самый простой:

Вы объявляете метод, который хотите вызвать в своей деятельности. Он должен быть общедоступным:

public void method(){}

Затем в конструкторе адаптера вы передаете ссылку на действие в качестве параметра:

public MyAdapter(Activity activity){}

И в onBindViewHolder:

MyActivity mActivity=(MyActivity)activity;
mActivity.method();
person Fustigador    schedule 15.03.2019

Вы можете сделать это легко.

Определить пользовательский интерфейс

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

В вашем классе адаптера

 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");
            }
        });    
    }

}

В вашей деятельности при создании адаптера добавьте этот код

 public void InitAdapter()
{

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

Вам нужно использовать Listener для обработки щелчка в вашем адаптере примерно так:

private OnItemClickListener mListener;

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

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

затем вызовите слушателя с помощью:

@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());
        }
    });
}

затем, когда вы используете адаптер, установите прослушиватель примерно так:

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

       // do something with the view and position.
    }
});
person ישו אוהב אותך    schedule 15.03.2019

Вы хотите, чтобы ваши recycleviews знали друг о друге. Вам понадобится класс, может быть, MainActivity, который сохранит выбранное значение, а также очистит его по запросу между повторными просмотрами. Затем вам понадобится это значение для распространения следующего recycleview. Если вы хотите быть эффективным, вы будете использовать один recycleview и обмениваться данными между выборками и анимировать его, чтобы он выглядел так, как будто создается новый recycleview.

person Haroun Hajem    schedule 15.03.2019