안드로이드 공식문서에따르면 Navigation라이브러리에서는 여러 UI 패턴을 지원합니다.
이말은 즉 Navigation라이브러리를 이용하면 여러 UI화면을 구현할수 있다는 이야기가 됩니다.
이번 포스팅에서는 setupWithNavController를 이용하여 UI화면을 구현하는 방법을 알아볼까 합니다.
setupWithNavController 메서드는 오버로딩되어있어 여러 형태를 가집니다. 파라미터의 형태가 달라질뿐 이메서드의 용도는 같습니다. 바텀네비게이션처럼 메뉴를 지니는 네비게이션 뷰를 NavigationHost의 NavController와 연결하여 navGraph의 fragment의 id와 menu의 id가 같을경우 해당 fragment로 이동되게 만들어줍니다. 이렇게 만들면 코드가 줄어들 뿐만아니라 백 스택 상태의 저장유무를 정할수있다는 장점이 있습니다.
뿐만아니라 툴바에도 setupWithNavController를 지정하여 현재 프래그먼트의 레이블과 뒤로갈수있는 백버튼을 추가해줄수도 있습니다.
toolbar가 없고 ActionBar가 자동으로 생성되는 스타일을 사용한다면 생성되는 ActionBar도 연결 가능 합니다.
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/firstFragment"
android:title="@string/home"
android:icon="@drawable/ic_home"/>
<item
android:id="@+id/secondFragment"
android:title="@string/menu"
android:icon="@drawable/ic_menu"/>
<item
android:id="@+id/thirdFragment"
android:title="@string/notification"
android:icon="@drawable/ic_notifications"/>
</menu>
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
app:startDestination="@+id/firstFragment">
<fragment
android:id="@+id/firstFragment"
android:name="com.example.FirstFragment"
android:label="@string/home"
tools:layout="@layout/firstFragment"/>
<fragment
android:id="@+id/secondFragment"
android:name="com.example.SecondFragment"
android:label="@string/menu"
tools:layout="@layout/secondFragment"/>
<fragment
android:id="@+id/thirdFragment"
android:name="com.example.ThirdFragment"
android:label="@string/notification"
tools:layout="@layout/ThirdFragment"/>
</navigation>
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private lateinit var navController: NavController
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
val navHostFragment = binding.navHostFragment
navController = navHostFragment.navController
val appBarConfiguration = AppBarConfiguration(
setOf(
R.id.firstFragment,
R.id.secondFragment,
R.id.thirdFragment
)
)
binding.bottomNavigationView.setupWithNavController(navController)
setupActionBarWithNavController(navController, appBarConfiguration)
}
override fun onNavigateUp(): Boolean = navController.navigateUp() || super.onNavigateUp()
}
'안드로이드 > AAC(Android Architecture Components)' 카테고리의 다른 글
[AAC] Paging 정의와 적용 (1) | 2024.06.17 |
---|---|
[AAC] Navigation 기능 구현 - 딥 링크 (0) | 2024.06.12 |
[AAC] Navigation의 정의와 적용 (0) | 2024.06.10 |
[AAC] Lifecycle 정의와 활용 (0) | 2024.06.07 |
[AAC] LiveData의 정의와 사용 (0) | 2024.06.06 |