【问题标题】:How to access LayoutManager from RecyclerView.Adapter to get scrollToPosition?如何从 RecyclerView.Adapter 访问 LayoutManager 以获取 scrollToPosition?
【发布时间】:2017-07-05 14:05:27
【问题描述】:

我通过为页眉和页脚添加单独的布局来自定义 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)

不幸的是,我无法从我的 Adapter 类访问 LayoutManager。有什么想法我能做什么?

【问题讨论】:

  • 使用适配器的构造函数在适配器中传递 LayoutManage

标签: java android scala android-recyclerview linearlayoutmanager


【解决方案1】:

如下制作 MyAdapter 的构造函数。

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

【讨论】:

    【解决方案2】:

    另一种方法

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

    【讨论】:

    • 让我开心。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-14
    • 2017-01-24
    • 2015-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多