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)
}
}
참고 사이트 >>>