programing

LinearLayoutManager를 사용하여 RecyclerView에서 맨 위로 스크롤

procenter 2021. 1. 17. 12:08
반응형

LinearLayoutManager를 사용하여 RecyclerView에서 맨 위로 스크롤


내가 거기있는 조각이 RecyclerView함께 LinearLayoutManager있는이 있습니다 CardView항목을. 항목을 맨 위로 스크롤해야하는 클릭시 플로팅 작업 버튼이 있습니다. 내가 사용하는 시도 scrollToPosition뿐만 아니라 scrollToPositionWithOffsetRecyclerView도에 LinearLayoutManager아래 그림과 같이. 그러나 그것은 전혀 효과가 없습니다. 왜 그렇습니까? 누구든지 나를 도울 수 있습니까?

그리고 xml 파일에 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()하지 않는다고 말하면 이 호출되고 있는지 여부를 테스트하십시오 . 로그 메시지를 추가하고 인쇄되었는지 확인하십시오.


이 방법을 사용하면 smoothScrollToPosition()최신 Android 버전에서 저에게 효과적이었습니다.

layoutManager.smoothScrollToPosition(mRecyclerView, null, 0);

다음을 사용하여 'scrollToPosition (0)'을 호출합니다.

public void scrollToPosition(final int position) {
    if (mRecyclerView != null) {
        getHandler().post(new Runnable() {
            @Override
            public void run() {
                mRecyclerView.scrollToPosition(position);
                if (position == 0) {
                    LinearLayoutManager layoutManager = (LinearLayoutManager) mRecyclerView.getLayoutManager();
                    layoutManager.scrollToPositionWithOffset(0, 0);
                    mScrollView.fullScroll(View.FOCUS_UP);
                }
            }
        });
    }
}

필자의 경우 요구 사항은 뷰를 역순으로 채우는 것이었기 때문에 레이아웃에 스크롤 뷰의 하단 뷰가 표시됩니다.

layoutManager.smoothScrollToPosition(mRecyclerView, null, 'last_index') 정말 도움이되지 않았습니다.

마지막 위치에있는 아이를 보여주기 위해 리사이클 러 뷰를 만들었을 때 문제가 해결되었습니다.

recyclerView.scrollToPosition(length-1)

참조 URL : https://stackoverflow.com/questions/32159724/scroll-to-top-in-recyclerview-with-linearlayoutmanager

반응형