Study Record

[안드로이드] navigation 참고사항 본문

안드로이드

[안드로이드] navigation 참고사항

초코초코초코 2023. 8. 1. 20:59
728x90

😶 탐색하는 fragment 에 따라 app bar title 변경하기

activity 하나에 여러 fragment 를 탐색할 때 app bar 의 title 을 자동으로 변경할 수 있는 함수를 제공한다. (Activity)

바로 setupActionBarWithNavController() 함수이다. 

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val navFragment = supportFragmentManager
            .findFragmentById(R.id.nav_host_fragment) as NavHostFragment

        setupActionBarWithNavController(navFragment.navController)
    }
}

 

app bar 의 title 은 nav Graph 의 android:label 이름과 같다.

<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"
    android:id="@+id/nav_graph"
    app:startDestination="@id/startFragment">
    <fragment
        android:id="@+id/startFragment"
        android:name="com.example.cupcake.StartFragment"
        android:label="@string/app_name"
        tools:layout="@layout/fragment_start">
       // ...
    </fragment>
    //...
</navigation>

 

 

😶 앱바의 뒤로가기 버튼과 Navigation 연결

onSupportNavigateUp 메서드로 앱바의 뒤로가기 버튼과 연결할 수 있다.

class MainActivity : AppCompatActivity() {

    private lateinit var appBarConfiguration: AppBarConfiguration

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val navFragment = supportFragmentManager
            .findFragmentById(R.id.nav_host_fragment) as NavHostFragment

        appBarConfiguration = AppBarConfiguration(navFragment.navController.graph)
        // 앱바의 경우
        setupActionBarWithNavController(navFragment.navController)
        // ToolBar 의 경우
        // binding.toolbar.setupWithNavController(navController, appBarConfiguration)
    }

    override fun onSupportNavigateUp(): Boolean {
        val navController = findNavController(R.id.nav_host_fragment)
        return navController.navigateUp(appBarConfiguration)
                || super.onSupportNavigateUp()
    }

}

 

728x90