Android アーキテクチャ コンポーネント

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 リポジトリのブランチ

その他参考サイト