最近使っているという声をよく聞くdataBinding。
Butter Knife替わりに使うこともできますし、
Viewに関連する変数をViewに直接反映させたり、色々と開発の助けになってくれるので、
覚えて損はないと思います。
今回は、Butter Knife替わり、Viewを自動でインスタンス化するケースについて
説明します。
DatabindingをGradleに追加する
build.gradle(app)に以下を追加します。
1 2 3 4 5 6 |
android{ //追加 dataBinding { enabled = true } } |
ViewにInjectする
Build.gradleファイルに上記を追加したら、Gradle Buildしてください。
次にViewにInjectしたいlayoutファイルに以下を追加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" > <!-- 起床時間は? --> <TextView android:id="@+id/wakeup_input_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:text="起床時間は?" /> </RelativeLayout> </layout> |
TextViewのみ追加した簡単なlayoutファイルです。
<layout>要素で全体のlayoutファイルを囲んでいます。
layout追加することによって、ActivityやFragmentでfindViewId関数
を呼ばなくても定義したTextViewを直接呼び出すことができます。
FragmentにDatabindingを導入する
先ほど作ったlayoutファイルを読み込むFragmentにDatabingdingで生成されたクラスを定義しましょう。
1 |
private FragmentInputDailyDataBinding bind; |
onCreateViewで、先に定義したFragmentInputDailyDataBindingクラスを生成しましょう。
1 2 3 4 5 6 7 8 9 |
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { bind = DataBindingUtil.inflate(inflater, R.layout.fragment_input_daily_data, container, false); // layoutファイルで定義したTextViewが呼び出せる bind.wakeupInputText.setText("bind"); // bindからViewを返す return bind.getRoot(); } |
DataBindingUtil.inflate関数
でレイアウトファイルからDataBindingクラスを生成します。
そして、DataBindingで生成されたクラスからViewを返しています。
ActivityでDatabindingを使う
Fragmentと同じようにDataBindingクラスを先と同様にメンバー変数に定義します。
onCreate関数でDatabindingUtilクラスのSetContentView関数を呼び出します。
1 2 3 4 5 6 7 8 |
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); bind = DataBindingUtil.setContentView(this,R.layout.activity_main); // layoutファイルで定義したTextViewを呼び出す bind.wakeupInputText.setText("bind"); } |
Databindingを用いて、ViewへのInjectionが自動で行えるようになりました。
code
more code
~~~~