0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AndroidのNavigationコンポーネントで親Fragmentを取得する方法

Posted at

解決策

val navHostFragment = parentFragment as NavHostFragment
val parent = navHostFragment.childFragmentManager.fragments[0]
if (parent is MainFragment)
// ...略

Fragment#getParentFragment()NavHostFragmentなのでDialogFragmentなどを実装している時、呼び出し元のFragmentにコールバックさせるのがひと手間いる。
NavHostFragmentの子Fragmentを覗いてみたら

[呼び出し元のFragment, 呼び出されたFragment, ...]

という風になっているので上記の内容で呼び出し元のFragmentを取得できた。

ただし、バックスタックがたくさんある場合はfragments[0]が呼び出し元のFragmentとは限らない。

別の解決策

val navHostFragment = parentFragment as NavHostFragment
val parent = navHostFragment.parentFragment as Fragment
if (parent is MainFragment)
// ...略

のように取得できるとのことだが、自分の環境ではnullが返ってきてしまうので1つ目の解決策をとらざるを得なかった。
NavHostFragmentにスタックを格納してるっぽいのでこれで取得できない気もするんだけど、バックスタックが多い環境下では取得できるのかもしれない。

所感

Navigationコンポーネント最高!
でも、以前の組み方が独特な方はご注意を!

参考

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?