前回記事でView Binding(ビューバインディング)の使い方についてまとめたが、今回はFragmentでView Bindingを使う方法をまとめてみた。
ActivityとFragmentで View Binding(ビューバインディング) を使う際の記述が異なるので、前回記事と比較して参考にしてほしい。
なお、今回も簡単なボタンをタップして”Hello World!”と表示するアプリを例に解説する。
1. View Bindingを使用した簡単なアプリ(Fragment編)
AndroidアプリのFragmentを利用して、図ような単純なアプリを作ってみた。
画面上の”Button”をタップした時に画面上の”Text View”を”Hello World!”に変換するコードを書く。これをやるには、”View Bindig”という操作が必要となる。
なお、画面構成としてFragmentを設定してActivityと関連づける操作とButtonやTextViewを事前に配置する必要があるが、本記事ではあくまでView Bindに絞ってまとめていくことにする。
2. View Bindingの使い方(Fragment編)
View Binding(ビューバインディング)はKotlin特有の比較的新しい処理のようだ。xml形式で記述した画面構成の各パーツを、Kotlinソースコードに取り込んで使用するための処理である。
“View Binding” をFragmentで使う手順は以下の通り。なお、”Button”や”Text View”などは、あらかじめ画面構成として適当な位置に配置されているものとする。
(1) buid.gradle(Module)に以下のコードを追加
android {
buildFeatures{
viewBinding = true
}
}
これでビューバインディングの機能が有効になる。なお、この記述はActivity、Fragmentで共通である。
(2) class Fragmentに以下のコードを追加
今回はFragmentの名前を”SampleFragment”として設定した。
class SampleFragment : Fragment() {
private var _binding: FragmentSampleBinding? = null
private val binding get() = _binding!!
}
3行目について、Activityの場合と少し記述が変わる。まず、_付きの変数を設定するのが一般的のようだ。FragmentSampleBindingにnull許容の?を付けてnullで初期設定している。
4行目について、_bindingについている!!はnot-null assertion operatorといって、nullableな型の変数を強制的にnon-nullに変換する働きをもつ。それをゲッターメソッドget()でプロパティをbindingに渡している。
(3) onCreateViewに以下のコードを追加
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
_binding = FragmentSampleBinding.inflate(inflater, container, false)
return binding.root
}
Activityの場合と記述は似ているが若干異なる。6,7行目はFragmentにおけるビューバインディング用の設定でほぼ定型文である。FragmentSampleBindingというクラスは自動生成されておりinflate()でxmlレイアウトのViewリソースを利用できるようになる。return binding.rootで、bindingクラスのroot(画面を構成する部品)にアクセス&表示できるようになる。
(4) onViewCreatedに以下のコードを追加
override fun onViewCreated(view:View, savedInstanceState: Bundle?){
super.onViewCreated(view, savedInstanceState)
binding.button.setOnClickListener{
binding.textView.text = "Hello World!"
}
}
Fragmentの場合、ボタンをタップした時の処理はonViewCreatedに記述する。
4行目のsetOnclickListener{}はクリックされた時のイベント処理を書くメソッド。
5行目でtextとIDを振ったviewを”Hello World!”と変化させて、めでたくHello worldと表示し完成となる。
なお、4行目と5行目で使用している”button”と”textView”はxmlレイアウトで指定したButtonとTextViewのidである。
(5) onDestroyViewに以下のコードを追加
override fun onDestroyView(){
super.onDestroyView()
_binding = null
}
Fragmentでビューバインディングを使用する場合忘れてはいけないのがこの手順。メモリリークを防ぐために必要な作業となる。
_bindingにnullを代入してメモリを開放する。
3.まとめ
今回は、Fragmentにおける View Binding(ビューバインディング) の使用方法についてまとめてみた。サンプルアプリとして、Fragment上のボタンをタップしてHello Worldと表示する単純なアプリを例にしている。
Activityの場合と記述が異なっており、Fragmentの方がnullの処理やDestroyViewによるメモリの開放など記述が少し増える。
初めてFragmentで View Binding(ビューバインディング) を使用する方は是非参考にしてほしい。
コメント