1. ホーム
  2. android

[解決済み] LinearLayoutManagerでRecyclerViewの上部にスクロールする

2023-05-21 08:03:33

質問

あるフラグメントに RecyclerViewLinearLayoutManager がある中で CardView の項目がある。クリックすると、アイテムが一番上にスクロールするフローティングアクションボタンがあります。私は scrollToPosition と同様に scrollToPositionWithOffsetRecyclerView で、さらに LinearLayoutManager を使っても、以下のようになります。しかし、全く効果がありません。これはなぜなのでしょうか?どなたかご教授ください。

そして、私は RecyclerView の中に直接 SwipeRefreshView の中にあります。私は setFloatingActionButton に設定すると同時に RecyclerView .

 public void setFloatingActionButton(final View view) {
    float = (android.support.design.widget.FloatingActionButton) getActivity().findViewById(R.id.float);
    float.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
    mRecyclerView.smoothScrollToPosition(0);


            android.support.design.widget.Snackbar.make(view, "Scrolled to Top", android.support.design.widget.Snackbar.LENGTH_SHORT)
                    .setAction("Ok", new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            LinearLayoutManager llm = (LinearLayoutManager) mRecyclerView.getLayoutManager();
                            llm.scrollToPosition(0);

                        }
                    })
                    .setActionTextColor(getActivity().getResources().getColor(R.color.coloLink))
                    .show();
        }
    });
}

どのように解決するのですか?

上記のコメントの続きで、理想的な方法は

mRecyclerView.smoothScrollToPosition(0);

の中に onClick でフローティングアクションボタンの

mLayoutManager.scrollToPositionWithOffset(0, 0);

は動作するはずです。また SnackBar のコードも削除できます。つまり、上記のメソッドは次のようになります。

public void setFloatingActionButton(final View view) {
    float actionButton = (android.support.design.widget.FloatingActionButton) getActivity()
            .findViewById(R.id.float);
    actionButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            LinearLayoutManager layoutManager = (LinearLayoutManager) mRecyclerView
                    .getLayoutManager();
            layoutManager.scrollToPositionWithOffset(0, 0);
        }
    });
}

もし、上記がうまくいかないと言うのなら、次に onClick() が呼び出されているかどうかをテストしてください。その中にログメッセージを入れてみて、それが出力されるかどうか見てみましょう。