본문 바로가기

Android[JAVA]

[Android][Java] RecyclerView 스크롤 마지막 position 얻기

채팅 구현할 때 채팅방에 있을 때 마지막으로 읽은 곳으로 리사이클러뷰 포커스를 맞춰주고 싶은데 어떻게 할까.. 하다가

onStop 될 때, 마지막 positon 쉐어드에 현재 있던 room번호를 key값으로 저장하고

해당 룸에 들어오면 방번호 저장한거로 onStart에 마지막 position 저장한거 불러와서 

포커스 맞춰주기 했다. 생각보다 쉬웠는데 어떻게 구현해야 할 지, 삽질을 엄청헀당...

 

   public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);

                // 화면에 조금이라도 보이게되는 마지막 아이템의 포지션을 출력합니다.
                lastVisibleItemPosition = ((LinearLayoutManager) recyclerView.getLayoutManager()).findLastCompletelyVisibleItemPosition();
                int itemTotalCount = recyclerView.getAdapter().getItemCount() - 1;
                if (lastVisibleItemPosition == itemTotalCount) {
                    Log.d(TAG, "onStoplastPosition...");
                    Log.d(TAG, "lastVisibleItemPosition : " + lastVisibleItemPosition);
                    Log.d(TAG, "litemTotalCount : " + itemTotalCount);

                    String lastVisibleItemPosition_st = Integer.toString(lastVisibleItemPosition); // String 값으로 변환
                    Log.d(TAG, "태그 lastVisibleItemPosition_st : " + lastVisibleItemPosition_st);

                    SharedPreferences sp = getSharedPreferences("LAST_Position", MODE_PRIVATE);
                    SharedPreferences.Editor editor = sp.edit();
                    editor.putString(roomNum, lastVisibleItemPosition_st);
                    editor.apply();
                }
            }

스크롤 관련 해본것들

 

 int centerOfScreen = recyclerView.getWidth() / 2;

layoutManager.scrollToPositionWithOffset(lastVisibleItemPosition_if, centerOfScreen);

layoutManager.scrollToPositionWithOffset(lastVisibleItemPosition_if, chatList.size() - (chatList.size()-lastVisibleItemPosition));

layoutManager.smoothScrollToPosition(recyclerView, new RecyclerView.State(),lastVisibleItemPosition_if); // 처음부터 lastVisibleItemPosition_if 까지 부드럽게 내려감

layoutManager.smoothScrollToPosition(recyclerView, new RecyclerView.State(),recyclerView.getAdapter().getItemCount())