Android application development 第21章:ViewModel、LiveData、DataBindingの導入

🔄 そもそもなぜ必要?(背景)

Androidでは、ActivityやFragmentはライフサイクルに応じて破棄・再生成されます
たとえば、画面を回転すると Activity が破棄されて新しく作り直されます。そのとき、変数や状態は初期化されてしまうので、ユーザーが入力したデータや表示中の情報が失われてしまいます。

これをうまく管理するために、状態管理やUIデータとの連携を分離・整理する必要があります。


🧠 ViewModel とは?

ViewModel画面に表示するためのデータ(状態)を保持するクラス です。

  • ActivityやFragmentとは別のライフサイクルを持つ
  • 画面回転などでActivityが再生成されても、ViewModelのデータは保持される
  • UIロジックをViewModelに集約することで、コードが見やすく保守しやすくなる

📦 JavaでのViewModel例(簡易)

public class MyViewModel extends ViewModel {
    private final MutableLiveData<String> text = new MutableLiveData<>();

    public LiveData<String> getText() {
        return text;
    }

    public void setText(String value) {
        text.setValue(value);
    }
}
MyViewModel viewModel = new ViewModelProvider(this).get(MyViewModel.class);
viewModel.getText().observe(this, value -> textView.setText(value));

🔁 LiveData とは?

LiveData は、変更を監視できるデータホルダーです。

  • observe() を使うと、UIが自動的にデータ更新を受け取れる
  • ライフサイクルを認識しているため、Activity/Fragmentが非表示のときは通知を止めてくれる

特徴まとめ:

特徴説明
オブザーバブルデータ変更時に通知を受けられる(Observerパターン)
ライフサイクル感知型画面が非表示のときは自動で通知を止める
ViewModelと相性抜群ViewModel内の状態をLiveDataで公開するのが一般的

🔗 DataBinding とは?

DataBinding は、XMLレイアウトとViewModelのデータを直接バインディング(紐づけ)する仕組みです。

通常、データを表示するために次のようなコードを書きます:

textView.setText(viewModel.getText().getValue());

これを XMLに直接書けるようにするのがDataBindingです。

✅ DataBindingのメリット

  • findViewById() を使わなくても済む
  • UI更新が自動で行われ、コードがスッキリする
  • Viewとデータのつながりが宣言的になる

XML側の例:

<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable
            name="viewModel"
            type="com.example.MyViewModel" />
    </data>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@{viewModel.text}" />
</layout>

Java側でのセットアップ:

ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
binding.setViewModel(viewModel);
binding.setLifecycleOwner(this);

🤝 3つの関係性まとめ(図でイメージ)

[ View (XML) ]
     ↑
    DataBinding
     ↑
[ LiveData <-> ViewModel ]
  • ViewModelがデータを保持
  • LiveDataで変更を通知
  • DataBindingでViewと自動連携

🎓 まとめ(学習のポイント)

技術学ぶ意義
ViewModelUIとは独立して状態管理できる(画面回転に強い)
LiveData安全で効率的なデータ通知が可能
DataBindingUI更新を省力化し、コードとレイアウトの分離が進む

mh

Related Posts

Android application development 第33章:実践ミニアプリ:天気情報アプリ

Android application development 第32章:実践ミニアプリ:シンプルなToDoリスト

You Missed

Kubernetes Learning 第40章:Kubernetesのアップグレードとバージョン管理 ~安全にバージョンを上げるための基本知識~

  • 投稿者 mh
  • 6月 24, 2025
  • 88 views

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第13章:ストレージとデータベースの基礎 : オブジェクトストレージ: Cloud Storage(バケット、オブジェクト、ストレージクラス)- あなたの「データ置き場」

  • 投稿者 mh
  • 6月 23, 2025
  • 101 views

Kubernetes Learning 第39章:CRD(Custom Resource Definition)とは?~Kubernetesに“自分専用のリソース”を追加する仕組み~

  • 投稿者 mh
  • 6月 21, 2025
  • 102 views

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第12章:Cloud CDN(Content Delivery Network):あなたのWebサイトを「世界中のユーザーに超高速で届ける宅配便ネットワーク」

  • 投稿者 mh
  • 6月 20, 2025
  • 119 views

Kubernetes Learning 第38章:Operatorとは? ~Kubernetesに「運用の自動化ロボット」を組み込む仕組み~

  • 投稿者 mh
  • 6月 19, 2025
  • 112 views

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第11章:Cloud Load Balancing:あなたのGCPリソースを「賢く振り分ける交通整理の達人」

  • 投稿者 mh
  • 6月 18, 2025
  • 124 views