3
1

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]思考停止で使っていたViewBindingを掘り下げる

Posted at

#ViewBindingとは?

ビュー バインディングとは、ビューを操作するコードを簡単に記述できる機能です。

簡単に言語化すると「簡単操作」です。
ViewBindingはappモジュール内で設定すると、ファイルの数だけバインディングクラスという「仲介役」が静的に?生成されます。

そうすることで、xmlファイル内の(ID名のあるViewのみ)Viewを簡単にクラスから参照でき、簡単に「操作」出来るわけです。

ちなみに、生成されたバインディングクラスの名前は、xmlファイル名のキャメルケースになります。

#設定

build.gradle(app)
android {
      // (省略)

     viewBinding {
          enabled = true
   }
}

モジュール単位で設定すると前述したので、このように。

#使い方
###Activityで用いる場合

private lateinit var binding : MainActivityBinding

// (省略)
    override fun onCreate(savedInstanceState: Bundle) {
        super.onCreate(savedInstanceState)
        binding = MainActivityBInding.inflate(layoutInflater)
        setContentView(binding.root)
    }

inflateメソッドで、バインディングクラスのインスタンスを生成していることになります。
そして、getRootメソッドでルートビューの参照を取得します。
それをいつものようにsetContentViewにセットすれば、画面レイアウトの生成が完了です。

###Fragmentで用いる場合
殆どActivityと同じなのですが、FragmentのライフサイクルはViewよりも長いので少し手を施す必要があります。
onDestroyViewで、Viewの参照を止める必要があります。
ドキュメントの書き方も、まぁ目的は達成しているのですが、手動でクラッシュ回避しているのと若干冗長できなので、自動で出来る方法を下記に記します。

var binding by autoCleared<HogeFragmentBinding>()

こちらで、初期化すればViewが破棄されると同時にバインディングの参照もクリーンアップされます。

#終わりに
inflateとfragmentのライフサイクルについて深堀したいな。

#参考

3
1
0

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?