📌
Navigation Architecture Componentで現在アクティブなFragmentか判定する方法
Navigation Architecture Component でイベントの中で画面遷移処理行う場合に、
ダイアログの裏側の Fragment が反応してしまい、backStack がおかしくなることが頻発したため、
自身がアクティブな Fragment か判定するために、extension を書いたのでメモしておきます。
サンプルコード
Fragment.kt
package com.example.extension
import androidx.fragment.app.Fragment
import androidx.navigation.NavDestination
import androidx.navigation.fragment.DialogFragmentNavigator
import androidx.navigation.fragment.FragmentNavigator
import androidx.navigation.fragment.findNavController
/**
* isCurrentDestination
*/
fun Fragment.isCurrentDestination(): Boolean {
val currentDestination: NavDestination = findNavController().currentDestination ?: return false
when (currentDestination) {
is DialogFragmentNavigator.Destination -> {
if (currentDestination.className == this.javaClass.name) {
return true
}
}
is FragmentNavigator.Destination -> {
if (currentDestination.className == this.javaClass.name) {
return true
}
}
}
return false
}
使用例
/**
* 戻るボタンクリック処理
*/
fun onClickBackButton() {
if (!isCurrentDestination()) {
return
}
findNavController().popBackStack()
}
Discussion