RecyclerView Adapter метод onBind - PullRequest
0 голосов
/ 15 марта 2019

У меня в MainActivity 3 RecyclerViews.

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

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

..... Проблема заключается в том, как запустить этот метод из прослушивателя метода 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) {


            }
        });


    }

Ответы [ 4 ]

0 голосов
/ 15 марта 2019

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

0 голосов
/ 15 марта 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.
    }
});
0 голосов
/ 15 марта 2019

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

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

public void method(){}

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

public MyAdapter(Activity activity){}

А в onBindViewHolder:

MyActivity mActivity=(MyActivity)activity;
mActivity.method();
0 голосов
/ 15 марта 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
      }   
 }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...