Android

Navigation Up Button

kldaji 2021. 7. 8. 21:42

※ navigation(R.id.myNavHostFragment)이 구현되어 있다는 가정하에 쓴 글이다.

 

// ${ActivityName}
class ${ActivityName} : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // binding
        val binding = ${ActivityName}Binding.inflate(layoutInflater)
        setContentView(binding.root)

        // Navigation Up Button
        val navController = this.findNavController(R.id.myNavHostFragment)
        NavigationUI.setupActionBarWithNavController(this, navController)
    }

    // Navigation Up Button
    override fun onSupportNavigateUp(): Boolean {
        val navController = this.findNavController(R.id.myNavHostFragment)
        return navController.navigateUp()
    }
}

 

 

※ 가끔 Up Button을 눌렀을 때와 Back Button을 눌렀을 때 다르게 동작하는 경우가 있는데, 그럴 때에는 Up Button을 Back Button을 눌렀을 때와의 기능을 통일시키면 쉽게 해결할 수 있다.

// ${ActivityName}
class ${ActivityName} : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // binding
        val binding = ${ActivityName}Binding.inflate(layoutInflater)
        setContentView(binding.root)

        // Navigation Up Button
        val navController = this.findNavController(R.id.myNavHostFragment)
        NavigationUI.setupActionBarWithNavController(this, navController)
    }

    // Navigation Up Button
    override fun onSupportNavigateUp(): Boolean {
        val navController = this.findNavController(R.id.myNavHostFragment)
        return navController.navigateUp()
    }

    // Up Button == Back Button
    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        when (item.itemId) {
            android.R.id.home -> {
                onBackPressed()
                return true
            }
        }
        return super.onOptionsItemSelected(item)
    }
    
}