Simple&Natural
[Android] Navigation Component 사용시 각 Fragment Toolbar의 뒤로가기 버튼 없애기 본문
[Android] Navigation Component 사용시 각 Fragment Toolbar의 뒤로가기 버튼 없애기
Essense 2020. 10. 10. 21:20Navigation Component 는 기본적으로 최상위 목적지가 아닌 지점에서는 뒤로가기 버튼을 생성한다.
이를 해결하기 위한 방법은 간단하다.
AppBarConfiguration에 각 Fragment를 최상위 지점으로 설정하는 것이다.
MainActivity에서 Configuration을 지정하고
사용하고자 하는 각 Fragment에서 해당 Config을 불러와 Toolbar를 초기화하면 된다.
이때, MainActivity가 아니라 Fragment에서 초기화를 시켜주는 이유는 각 Fragment별로 다른 유형의 Toolbar를
사용하고자 하기 때문이다. 다음 공식문서의 설명을 참고하면 된다.
Support app bar variations
Adding the top app bar to your activity works well when the app bar’s layout is similar for each destination in your app. If, however, your top app bar changes substantially across destinations, then consider removing the top app bar from your activity and defining it in each destination fragment, instead.
The navigation configuration logic is the same for both of these fragments, except that you should call setupWithNavController() from within each fragment's onViewCreated() method, instead of initializing them from the activity:
출처: developer.android.com/guide/navigation/navigation-ui#appbarconfiguration
MainActivity.class
appBarConfiguration 지정 시 인자로 destinationIds와 같이 최상위 레이아웃의 id를 직접 넣어도 되지만
아래처럼 bottomNavigationView의 Menu를 인자로 넣어주면 좀 더 편리하다.
class MainActivity : BaseActivity() {
lateinit var appBarConfiguration: AppBarConfiguration
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val navHostFragment =
supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
val navController = navHostFragment.navController
val destinationIds = setOf(
R.id.Home,
R.id.Notification,
R.id.News,
R.id.Setting
)
appBarConfiguration = AppBarConfiguration(bottom_nav.menu)
// val appBarConfiguration = AppBarConfiguration(navController.graph)
// toolbar
// .setupWithNavController(navController, appBarConfiguration)
bottom_nav
.setupWithNavController(navController)
}
}
fragment의 onViewCreated 안에서 activity의 appConfig을 받아와 초기화 해준다.
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val navController = findNavController()
val appBarConfiguration = (activity as MainActivity).appBarConfiguration
view.findViewById<Toolbar>(R.id.toolbar_home)
.setupWithNavController(navController, appBarConfiguration)
}
'안드로이드(Android) > 기타' 카테고리의 다른 글
BottomNavigationView Menu Item 커스터마이징 (0) | 2020.10.24 |
---|---|
[Android] Retrofit으로 파라미터 선택적으로 보내기 (0) | 2020.10.14 |
[Android] BottomNavigationView Text Size 변경 방법 (2) | 2020.10.10 |
[Android] BottomNavigationView + Nav Component 연동 시 유의사항 정리 (0) | 2020.10.10 |
[Android] Admob 오류 종류 (0) | 2020.10.09 |