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

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

その他参考サイト