recyclerview 위치 저장

매일 수정하는 GNOSS LV5·2022년 1월 27일
1

AndroidStudio

목록 보기
43/83

RecyclerVIew를 사용하다 보면 아이템안으로 들어가거나 다른 프래그먼트,액티비티를 띄우는 경우가 발생한다.
이후 다시 되돌아오면 리사이클러뷰의 위치가 항상 처음으로 바뀌어있어서 불편함을 겪는 경우가 있다.

예전에는 position을 저장하여 복구하거나 savedInstanceState 에 값을 저장하여 사용하곤 했는데 불편함이 많았던 터라 기능이 개발되었다.

stateRestorationPolicy

조금 더 쉽게 Scroll을 복구 할수있게되었다.

private fun initRecyclerView() {
        testAdapter = TestAdapter()
        binding.testRecyclerView.apply {
            adapter = testAdapter
            layoutManager = LinearLayoutManager(requireContext())
            testAdapter.stateRestorationPolicy =
							RecyclerView.Adapter.StateRestorationPolicy.PREVENT_WHEN_EMPTY
        }

옵션으로 3가지가 있다.

  • ALLOW — the default state, that restores the RecyclerView state immediately, in the next layout pass
  • PREVENT_WHEN_EMPTY — restores the RecyclerView state only when the adapter is not empty (adapter.getItemCount() > 0). If your data is loaded async, the RecyclerView waits until data is loaded and only then the state is restored. If you have default items, like headers or load progress indicators as part of your Adapter, then you should use the PREVENT option, unless the default items are added using ConcatAdapter (find out more here). ConcatAdapter waits for all of its adapters to be ready and only then it restores the state.
  • PREVENT — all state restoration is deferred until you set ALLOW or PREVENT_WHEN_EMPTY.

Allow : 항상 현재 어댑터의 상태를저장. (default)

Prevent_when_empty : 어댑터에 아이템이 1개 이상일때만 상태를 저장하고 복구한다.

Prevent : 다른 옵션을 주지않는한 현재 어댑터를 저장하지않는다.

profile
러닝커브를 따라서 등반중입니다.

0개의 댓글