Как получить доступ к LayoutManager из RecyclerView.Adapter, чтобы получить scrollToPosition?

Я настроил RecyclerView добавив отдельные макеты для верхнего и нижнего колонтитула. Я создал константы для определения свойства заголовка, нижнего колонтитула и элемента списка в классе адаптера. Я также создал шаблон ViewHolder и назначил макеты для отображения на основе типа представления. Я установил верхний колонтитул в нулевой позиции и нижний колонтитул в последней позиции массива путем переопределения getItemViewType метод.

Я хочу сделать элемент нижнего колонтитула кликабельным, поэтому я назначаю setOnClickListener(new View.OnClickListener()) и переписал onClick(view: View)

Моя цель - нажать на нижний колонтитул и scrollToPosition 0 или 1 (0 = заголовок, 1 = первый элемент элемента).

Это определение MyAdapter:

class MyAdapter(context: Context, data: Array[String]) extends RecyclerView.Adapter[RecyclerView.ViewHolder]

...

override def onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int): Unit = holder match {
  ...
  case holder:FooterViewHolder =>
    holder.backToTop.setOnClickListener(new View.OnClickListener() {
      override def onClick (view: View) {
        backToTop(???)
        Toast.makeText (context, "Clicked Footer", Toast.LENGTH_SHORT).show()
      }
    })
  ...
}
...

Я читаю, мне просто нужно сделать это: recyclerView.getLayoutManager().scrollToPosition(position)

К сожалению, я не могу получить доступ к LayoutManager из своего класса Adapter. Есть идеи, что я могу сделать?

2 ответа

Решение

Сделайте конструктор MyAdapter следующим образом.

 MyAdapter myAdapter=new MyAdapter(context,list,mLayoutManager);

Другой подход

@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
    super.onAttachedToRecyclerView(recyclerView);
    this.recyclerView = recyclerView;
}
Другие вопросы по тегам