1
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 5 years have passed since last update.

Fragmentの初期配置ってどうすのがいいんだっけ

Last updated at Posted at 2019-09-26

調べたこと

FragmentをActivityにaddする処理の書き方について

背景

コードレビューにてこんなコードを見つけました。

.java
savedInstanceState ?: run {
    val fragment = HogeFragment.newInstance()
    supportFragmentManager
            .beginTransaction()
            .add(R.id.container, fragment)
            .commit()
}

savedInstanceState を確認して、
Activityの再生成時にFragmentが重複しないようにしてくれてるね。
いいじゃん、いいじゃん。

あれ...?
だけど、なんか懐かしさを感じる。
最近これを自分で書いた記憶ないぞ..!?

自分の最近のプロジェクトを覗いてみる

.java
supportFragmentManager.findFragmentById(R.id.container) ?: run {
    val fragment = HogeFragment.newInstance()
    supportFragmentManager
            .beginTransaction()
            .add(R.id.container, fragment)
            .commit()
}

思い出しました。
指定したViewのIDにFragmentが登録されているかを確認して、
Fragmentが登録されていなければaddする、としていました。

どっちがいいの??

それぞれ、僕の理解で日本語に落とし込みます。

  • Activityが初回生成時には、Fragmentをaddする
  • ViewにFragmentが登録されていなければ、Fragmentをaddする

どうでしょう?
個人的には、後者の方が考えやすいです。
当然、画面回転などのActivity再生成はどちらでもハンドリングできます。
なので、最近僕は savedInstanceState ?: run {} を書いていなかったんです。

最後に

ちなみに、背景で書いたコードレビューではコメントを付けずにスルーしました。
なぜなら、これは好みの範疇だと思ったからです。

ただ、世間ではjetpackのnavigationを使う流れがきています。
自分でFragmentをaddするなんて時代遅れなのかもしれません。

1
0
2

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
1
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?