반응형
바텀 네비게이션을 전환만 한다고 생각을 하지만 우리는 카카오톡 애플리케이션을 보게 되면 친구창에서 바텀 네비게이션에 있는 다른 채팅을 가게 되었을때 다시 친구 창에 돌아오면 위치를 저장하는 것을 보실 수 있습니다.
private fun runBottomNavi() {
binding.btmNavMain.run {
setOnItemSelectedListener { item ->
val selectedFragment: Fragment = when (item.itemId) {
R.id.btm_home -> HomeFragment()
R.id.btm_chatting -> ChattingFragment()
R.id.btm_post -> PostFragment()
R.id.btm_profile -> ProfileFragment()
else -> HomeFragment()
}
supportFragmentManager.beginTransaction()
.replace(R.id.frm_main, selectedFragment)
.addToBackStack(null) // 백스택에 현재 프래그먼트를 추가
.commitAllowingStateLoss()
true
}
selectedItemId = R.id.btm_home
}
}
위의 기존의 코드처럼 작성을 하게 된다면 돌아올때 상태값을 잊어버리고 다시 띄우게 됩니다.
하지만 아래의 코드처럼 작성을 show키워드를 사용하게 된다면 편의성을 기를 수 있습니다.
또한 null이라면 이라는 선택지를 통해 중복적으로 프래그먼트가 add 하는 것을 방지해주면 오직
네가지를 키고 전환하고 다시 돌아왔을때 스크롤이나 작업 상태를 저장하는 것을 보실 수 있습니다.
private fun runBottomNavi() {
binding.btmNavMain.run {
setOnItemSelectedListener { item ->
val fragmentTag: String = when (item.itemId) {
R.id.btm_home -> "HOME_FRAGMENT"
R.id.btm_chatting -> "CHATTING_FRAGMENT"
R.id.btm_post -> "POST_FRAGMENT"
R.id.btm_profile -> "PROFILE_FRAGMENT"
else -> "HOME_FRAGMENT"
}
var selectedFragment = supportFragmentManager.findFragmentByTag(fragmentTag)
supportFragmentManager.beginTransaction().apply {
// 기존에 추가된 프래그먼트를 숨김
supportFragmentManager.fragments.forEach { hide(it) }
if (selectedFragment == null) {
selectedFragment = when (item.itemId) {
R.id.btm_home -> HomeFragment()
R.id.btm_chatting -> ChattingFragment()
R.id.btm_post -> PostFragment()
R.id.btm_profile -> ProfileFragment()
else -> HomeFragment()
}
add(R.id.frm_main, selectedFragment!!, fragmentTag)
} else {
// 선택된 프래그먼트를 표시
show(selectedFragment!!)
}
}.commitAllowingStateLoss()
true
}
selectedItemId = R.id.btm_home
}
}
반응형
'Android & Kotlin > Android' 카테고리의 다른 글
[Android kotlin] 네트워크 메니저로 사용자 경험 개선하기 (Connectivity Manager) (1) | 2024.01.02 |
---|---|
[안드로이드 코틀린] 리사이클러뷰 뷰타입에 따른 설정 (실습 : 채팅방) (0) | 2023.05.13 |
[코틀린] 안드로이드 리사이클러뷰 특정뷰(아이템) 클릭 (0) | 2022.12.29 |
[코틀린] 안드로이드 플로팅버튼 이미지 조절, 버튼 클릭시 최상단, 스크롤이벤트 (0) | 2022.12.29 |
viewpager2 이미지 자동 스크롤 (recyclerview활용) (2) | 2022.12.28 |
댓글