Nuke Olaf - Log Store

[Android] 안드로이드 - 리사이클러뷰 스크롤 상태저장 본문

Android

[Android] 안드로이드 - 리사이클러뷰 스크롤 상태저장

NukeOlaf 2020. 5. 6. 06:53

onSaveInstanceState를 사용하여 리사이클러뷰의 스크롤 중인 상태를 저장할 수 있다.

아래의 예시는 ActivityDetail 이 onCreate() 된 후,
다른 액티비티(ActivityAnother)를 호출하여 ActivityDetail 이 잠시 액티비티 스택에 쌓여있다가
다시 ActivityDetail 로 돌아와 onResume() 을 호출할때, 저장되었던 상태를 보여주도록 한다

 

class ActivityDetail : AppCompatActivity() {

    private var recyclerViewState: Parcelable? = null
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_detail)
        
        postDetailRv.adapter = PostDetailAdapter()
        
        button.setOnClickListener {
            openAnotherActivity()
        }
    }
    
    override fun onResume() {
        super.onResume()
        if (recyclerViewState != null) {
            setSavedRecyclerViewState()
        }
    }
    
    private fun openAnotherActivity() {
        saveRecyclerViewState()
        Intent(this, ActivityAnother::class.java).apply {
            startActivity(this)
        }
    }
    
    private fun saveRecyclerViewState() {
        // LayoutManager를 불러와 Parcelable 변수에 리사이클러뷰 상태를 Bundle 형태로 저장한다
        recyclerViewState = postDetailRv.layoutManager!!.onSaveInstanceState()
    }
    
    private fun setSavedRecyclerViewState() {
        postDetailRv.layoutManager!!.onRestoreInstanceState(recyclerViewState)
    }
     
}

 

참고 사이트 >>>

https://kwangsics.tistory.com/entry/Android-recyclerView-state-save-%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EB%A6%AC%EC%82%AC%EC%9D%B4%ED%81%B4%EB%9F%AC%EB%B7%B0-%EC%83%81%ED%83%9C-%EC%A0%80%EC%9E%A5-onSaveInstanceState

Comments