web-dev-qa-db-ja.com

RecyclerView.AdapterからLayoutManagerにアクセスしてscrollToPositionを取得するにはどうすればよいですか?

ヘッダーとフッターに別々のレイアウトを追加して、RecyclerViewをカスタマイズしました。アダプタークラスのヘッダー、フッター、リストアイテムのプロパティを決定する定数を作成しました。また、ViewHolderパターンを作成し、ビュータイプに基づいて表示するレイアウトを割り当てました。オーバーライドgetItemViewTypeメソッドを使用して、ヘッダーを配列の0番目の位置に、フッターを最後の位置に修正しました。

フッター要素をクリック可能にしたいので、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にアクセスできません。私にできることはありますか?

9
user3350744

MyAdapterのコンストラクタを次のように作成します。

 MyAdapter myAdapter=new MyAdapter(context,list,mLayoutManager);
4
Rahul Giradkar

別のアプローチ

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