활동을로드 한 후 RecyclerView 목록의 맨 아래로 스크롤하고 싶습니다.
GENERIC_MESSAGE_LIST = (ArrayList) intent.getExtras().getParcelableArrayList(ConversationsAdapter.EXTRA_MESSAGE);
conversationView = (RecyclerView) findViewById(R.id.list_messages);
conversationView.setHasFixedSize(true);
conversationViewLayoutManager = new LinearLayoutManager(this);
conversationView.setLayoutManager(conversationViewLayoutManager);
conversationViewAdapter = new ConversationAdapter(GENERIC_MESSAGE_LIST, this);
conversationView.setAdapter(conversationViewAdapter);
conversationView.scrollTo(...)
RecyclerView에서 지원되지 않는 것에 대한 예외를 throw하고 conversationView.scrollToPosition(...)
아무것도하지 않는 것 같습니다.
위의 코드 블록 뒤에 추가했습니다
conversationView.scrollToPosition(GENERIC_MESSAGE_LIST.size() + 1)
작동하지 않습니다. 에 30 개의 요소가 GENERIC_MESSAGE_LIST
있습니다.
답변
그냥 설정 setStackFromEnd=true
또는 setReverseLayout=true
너무 LLM은 끝에서 항목을 레이아웃 것이다.
이 두 가지의 차이점 setStackFromEnd
은 마지막 요소를 표시하도록보기를 설정하고 레이아웃 방향이 동일하게 유지된다는 것입니다. (왼쪽에서 오른쪽으로 가로 리사이클 러보기에서 마지막 요소가 표시되고 왼쪽으로 스크롤하면 이전 요소가 표시됩니다)
반면 setReverseLayout
어댑터가 추가 한 요소의 순서는 변경됩니다. 레이아웃은 LTR Recycler View에서 가장 왼쪽에있는 마지막 요소에서 시작한 다음 오른쪽으로 스크롤하면 이전 요소가 표시됩니다.
견본:
final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
linearLayoutManager.setReverseLayout(true);
_listView.setLayoutManager(linearLayoutManager);
자세한 내용은 설명서 를 참조하십시오.
답변
나는이 게시물을보고 답을 찾았지만 …이 게시물의 모든 사람들이 나와 같은 시나리오에 직면했다고 생각합니다 scrollToPosition()
. 명백한 이유로 완전히 무시되었습니다.
내가 무엇을 사용하고 있었습니까?
recyclerView.scrollToPosition(items.size());
… 무슨 일 했어요 ?
recyclerView.scrollToPosition(items.size() - 1);
답변
해결책을 알고 싶은 사람이 있다면 아래 답변이 늦습니다.
conversationView.smoothScrollToPosition(conversationView.getAdapter().getItemCount() - 1);
답변
recyclerview의 임의의 위치에서 아래로 스크롤하려면
edittext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
rv.postDelayed(new Runnable() {
@Override
public void run() {
rv.scrollToPosition(rv.getAdapter().getItemCount() - 1);
}
}, 1000);
}
});
답변
메시지를 보낸 후와 서버에서 메시지를 받기 전에이 코드를 추가하십시오.
recyclerView.scrollToPosition(mChatList.size() - 1);
답변
를 호출 setAdapter
하면 화면에 항목을 즉시 배치하고 배치하지 않습니다 (단일 레이아웃 패스가 필요함) scrollToPosition()
. 호출 할 때 스크롤 할 실제 요소가 없습니다.
대신 ViewTreeObserver.OnGlobalLayoutListener를 (에 의해 생성 된 addOnGlobalLayoutListner () 를 통해) 등록해야 첫 번째 레이아웃 통과 후까지 지연됩니다 .ViewTreeObserver
conversationView.getViewTreeObserver()
scrollToPosition()
conversationView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
public void onGlobalLayout() {
conversationView.scrollToPosition(GENERIC_MESSAGE_LIST.size();
// Unregister the listener to only call scrollToPosition once
conversationView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
// Use vto.removeOnGlobalLayoutListener(this) on API16+ devices as
// removeGlobalOnLayoutListener is deprecated.
// They do the same thing, just a rename so your choice.
}
});
답변
코 틀린 솔루션 :
“recyclerView.adapter”를 설정 한 후 또는 “recyclerView.adapter.notifyDataSetChanged ()”이후에 아래 코드를 적용하십시오.
recyclerView.scrollToPosition(recyclerView.adapter.itemCount - 1)