目次
- 1この講座について
- 2イントロダクション
- 3前提知識
- 4この講座で学べること
- 5概要
- 6アプリ概観
- 7タスク:開発を開始する
- 8タスク:ViewModelデータバインディングを追加する
- 8.1ステップ1:GameViewModel用のデータバインディングを追加する
- 8.2ステップ2:イベントを扱うためのリスナーバインディングを使う
- 8.3ステップ3:ScoreViewModel用のデータバインディングを追加する
- 8.4データバインディングエラー文のトラブルシューティング
- 9タスク:データバインディングにLiveDataを追加する
- 9.1ステップ1:game_fragment.xmlファイルにword LiveDataを追加する
- 9.2ステップ2:score_fragment.xmlファイルにscore LiveDataを追加する
- 9.3ステップ3:データバインディングを用いてstringフォーマットを追加する
- 10完成済みプロジェクト
- 11まとめ
- 11.1ViewModel データバインディング
- 11.1.1リスナーバインディング
- 11.2データバインディングにLiveDataを追加する
- 11.3データバインディングを用いたstringフォーマット
この講座について
この記事はAndroid Kotlin基礎講座の一部です。これ以外のAndroid Kotlin基礎講座(全10回)も一緒に受講することでAndroidアプリの開発手法、およびKotlinの基礎知識を学ぶことができます。全講座はAndroid Kotlin基礎講座にリスト化されていますので参考にしてください。
またこの記事ではGoogle Developers Training teamによってGoogle Codelabsに公開されているAndroid Kotlin Fundamentals courseを日本語に翻訳しつつ、筆者の考察も交えながら発信しています。オリジナルのサイト(英文)はこちら。
この記事はViewModelとLiveDataについて解説している4つのシリーズ記事のうちの一つです。ViewModelとLiveDataはAndroidアーキテクチャコンポーネントです。Androidアーキテクチャコンポーネントとは頑丈、テスト可能、保守可能なアプリをデザインする手助けとなるライブラリおよびコンポーネントのことです。
これら4つの記事では、GuessTheWordというアプリを使って作業していきます。順序立ててタスクをこなしていく構成になっているので、4つの記事を順番に進めていくことをお勧めします。
- 5.1: ViewModelとViewModelProvider
- 5.2: LiveDataとLiveData observers
- 5.3: ViewModelとLiveDataのデータバインディング
- 5.4: LiveDataの変換
イントロダクション
この講座の前回の記事では、GuessTheWordアプリのコードを改良しました。ここまででアプリは、ViewModelオブジェクトを使い、画面回転などの端末のコンフィグレーション変化のあとでもデータを保持することができるようになっています。また監視可能なLiveDataを使いし、監視されているデータに変化があった際に自動でビューに通知がいくようにもしました。
この記事では、引き続きGuessTheWordアプリを使って作業していきます。アプリのビューをViewModelクラスに結合し、レイアウト上のビューがViewModelオブジェクトと直接やり取りできるようにします。(今まではアプリのフラグメントを通して、ビューはViewModelと間接的にやり取りしてきました)ViewModelオブジェクトとデータを結合した後は、フラグメントのクリックハンドラーは必要なくなります。
さらにGuessTheWordアプリでLiveDataをUIにデータの変化を通知するためのデータバインディングソースとして利用させるようにしていきます。LiveDataオブザーバーメソッドは用いません。
前提知識
- Kotlinによる基本的なアプリの作り方
- アクティビティとフラグメントのライフサイクルについて
- ViewModelオブジェクトの使い方
- ViewModel内のLiveDataを使ってデータを保存する方法
- LiveDataのデータの変化を監視するためのオブザーバーメソッドの追加方法
この講座で学べること
- データバインディングライブラリの使い方
- ViewModelとデータバインディングを統合する方法
- Livedataとデータバインディングを統合する方法
- フラグメントのクリックリスナーを置き換えるためのリスナーバインディングの使い方
- データバインディング式にstringフォーマットを追加する方法
概要
- GuessTheWordアプリのレイアウト内のビューはUI controller(フラグメント)を用いて情報を中継することで、ViewModelオブジェクトと間接的にやり取りしています。この記事ではビューをViewModelと結合させることでビューがViewModelオブジェクトと直接やり取りできるようにします。
- データバインディングソースとしてLiveDataを使うようにアプリを変更していきます。この変更の後はLiveDataオブジェクトがデータの変化に関してUIに通知し、LiveDataオブザーバーメソッドは必要なくなります。
コメント