Table of Contents
Android アーキテクチャ コンポーネント を公式サイトを見ながら、勉強する。
ビュー バインディング
app/build.gradle
viewBinding {
enabled = true
}
app/src/main/res/layout/main_fragment.xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAlignment="center" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
</LinearLayout>
</layout>
app/src/main/java/com/c/local/example/ui/main/MainFragment.java
public class MainFragment extends Fragment {
// 自動で MainFragmentBinding クラスができる
private MainFragmentBinding binding;
public static MainFragment newInstance() {
return new MainFragment();
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
// レイアウトと Fragment をこんな感じで紐づける
binding = MainFragmentBinding.inflate(inflater, container, false);
View view = binding.getRoot();
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// ビュー バインディング
binding.button.setOnClickListener(v -> {
binding.text.setText("time: " + System.currentTimeMillis());
});
}
}
レイアウトとバインディング式
app/src/main/res/layout/main_fragment.xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<!-- データクラスをこんな感じで宣言 -->
<data>
<variable name="data" type="com.c.local.example.ui.main.Data" />
</data>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{data.text}"
android:textAlignment="center" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
</LinearLayout>
</layout>
app/src/main/java/com/c/local/example/ui/main/MainFragment.java
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// レイアウトとバインディング式
binding.setData(new Data());
binding.button.setOnClickListener(v -> {
binding.text.setText("time: " + System.currentTimeMillis());
});
}
勉強用の Example リポジトリのブランチ
その他参考サイト
-
【Android Architecture Components】Guide to App Architecture 和訳 - Qiita注意Guide to App Architectureの和訳になります。わかりづらい表現を意訳したり、回りくどいところを端折ったりしています。和訳に自信がないところもあるため、間違いを見つけた…
-
LiveData について勘違いしていたことをいくつか - QiitaAndroid Architecture Components(以下 AAC) に含まれる 「LiveData」 のサンプルを Kotlin で書いてみました。LiveData とはLiveDa…