0
0

More than 3 years have passed since last update.

ViewModelについて

Posted at

ViewModelとは

詳細はhttps://developer.android.com/topic/libraries/architecture/viewmodel

ざっくり説明すると、Activityのライフサイクルには以下の問題がある。

  • onSaveInstanceState()を利用したデータの保存は、データ量が多い場合は適していない。
  • 非同期処理中に画面が再生成された場合、非同期処理を中止して再実行するなどのリソースが無駄になる。

UIでは、データの表示、ユーザからの要求の対応、OSとのやり取り(権限の取得)を行うようする。
そして、DBへのアクセスやネットワークからのデータの取得は、UIから切り離して実装するほうが良い。

それが容易に実装できるのが、ViewModelクラス

実装

ViewModel本体の実装

ViewModelクラスを継承したクラスを実装する。
このクラスには、保持しておきたいデータを定義する。

/**
 * ViewModelクラスを継承したクラス
 */
class MainViewModel : ViewModel() {
    /**
     * 保持するデータ
     */
    val name: MutableLiveData<String> by lazy {
        // nameを初期化
        MutableLiveData<String>().also {
            it.value = loadName()
        }
    }

    private fun loadName(): String {
        return "initName"
    }
}

ViewModelの取得

ActivityやFragmentでViewModelクラスを継承したクラスを取得する。

viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)

ViewModelにアクセスする

ViewModelが保持している値を取得・変更する。

viewModel.name.value = "new value"

最後に

今回はものすごいシンプルな実装でこれだけだと、あまり効果的な使用方法がぴんと来ないが、
ViewModelを継承したクラスのデータ初期化時の処理を記述することでUIとロジックの分離ができる。

DBへのアクセスやネットワークからのデータ受信はまた今度。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0