Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ViewModel使ってますか?

 ViewModel使ってますか?

メルカリさん、ヤフーさん主催のMixLeapでLTしたときの資料です。
AndroidのViewModelのさわりの説明というかんじです

katsuki-nakatani

April 26, 2018
Tweet

More Decks by katsuki-nakatani

Other Decks in Technology

Transcript

  1. データの持ち方 data class CurrencyOrder( var exchanger: String? = null, //購入Exchanger

    var folio_group:Long = FolioGroup.DEFAULT_ID, //この通貨のグループ var currency_pair: String? = null, //通貨ペア var proc_date: String = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy/MM/dd")), //処理日付 var amount: Double = 0.toDouble(), //処理数量 var price: Double = 0.toDouble() //ベースとなる通貨の価格 exchanger folio_group currency_pair proc_date amount price zaif 1 jpy_btc 2018/1/1 1 850000 zaif 2 jpy_xem 2018/2/2 1 35
  2. 安易に考える Activity ViewPager Pager1 Fragment Pager2 Fragment ActivityViewModel 1.ActivityViewModelがデータを全件取得 2.ActivityがそのデータをDataCallbackInterfaceを

    実装しているであろう Fragmentに送る 3.FragmentがCallbackを受け取り、データを表示 FragmentViewModel FragmentViewModel DataCallback DataCallback
  3. 諸問題が解決 Activity ViewPager Pager1 Fragment Pager2 Fragment ActivityViewModel AssetViewModel DataCallback

    DataCallback ・DataCallbackを用意しなくても良くなり、 ActivityがFragmentの実装を意識しなくて良くなった ・Activityの回転時に再度データを検索、表示するような実装を意識しなくても良くなった
  4. ViewModelの作り方 class AssetsViewModel @Inject constructor(private val database: AppDatabase, private val

    messageRepository: MessageRepository, private val assetRepository: AssetsRepository, private val preferenceRepository: PreferenceRepository) : ViewModel() Architecture ComponentのViewModelを継承する
  5. ViewModelはLiveDataと組み合わせると便利 LiveDataの特徴 SubscribeするとActivityやFragmentのライフサイクル状態を 見てコールバックを呼び出してくれる LiveDataの定義 var assetsList: MutableLiveData<AssetsResponse> = MutableLiveData()

    LiveDataへデータのプッシュ assetsList.postValue(response) viewModel.assetsList.observe(this,Observer<AssetsResponse> { it -> //表示処理}) LiveDataのオブザーブ ViewModel Fragment