如何从 RecyclerView.Adapter 访问 LayoutManager 以获得 scrollToPosition?

我通过为页眉和页脚添加单独的布局进行自定义。我创建了常量来确定适配器类中页眉、页脚和列表项的属性。我还创建了一个 ViewHolder 模式,并根据视图类型指定要显示的布局。我通过 override 方法将页眉固定在数组的第 0 个位置,将页脚固定在数组的最后一个位置。RecyclerViewgetItemViewType

我想使页脚元素可点击,所以我分配了一个并覆盖setOnClickListener(new View.OnClickListener())onClick(view: View)

我的目标是单击页脚和0或1(0 = 页眉,1 = 第一个项目元素)。scrollToPosition

这就是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)

不幸的是,我无法从我的适配器类访问布局管理器。任何想法,我能做什么?


答案 1

另一种方法

@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
    super.onAttachedToRecyclerView(recyclerView);
    this.recyclerView = recyclerView;
}

答案 2

使 MyAdapter 的构造器如下所示。

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

推荐