📌

Navigation Architecture Componentで現在アクティブなFragmentか判定する方法

2021/03/13に公開

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()
  }
GitHubで編集を提案
株式会社ナンバーフォー

Discussion