LinearLayoutManager를 사용하여 RecyclerView에서 맨 위로 스크롤
내가 거기있는 조각이 RecyclerView
함께 LinearLayoutManager
있는이 있습니다 CardView
항목을. 항목을 맨 위로 스크롤해야하는 클릭시 플로팅 작업 버튼이 있습니다. 내가 사용하는 시도 scrollToPosition
뿐만 아니라 scrollToPositionWithOffset
와 RecyclerView
도에 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
'programing' 카테고리의 다른 글
어떻게“a <= b && b <= a && a! = b”가 참일 수 있습니까? (0) | 2021.01.17 |
---|---|
VSCode에서 사용자 지정 코드 조각을 추가하는 방법은 무엇입니까? (0) | 2021.01.17 |
액션 필터에 서비스 삽입 (0) | 2021.01.17 |
React에서 부울 값을 props로 전달할 수없는 이유는 항상 내 코드에 문자열을 전달해야합니다. (0) | 2021.01.17 |
상황에 맞는 메뉴에 SVN 명령이 나타나지 않습니다. (0) | 2021.01.17 |