MVVM Pattenにrefactoring (2): Databinding

(参考: https://qiita.com/Tsutou/items/69a28ebbd69b69e51703)

Databinding 追加

Databindingを使う理由??

Databindingとは,xmlにデータをバインディングして不必要なコードを減らす方法で,通常,MVVM Pattenを実装する時に使用します。
(Xml宣言をしやすくしてコード使用を減らす)

Databinding 設定

Build gradle (model) android {}の中に以下を追加

dataBinding {
   enabled = true
}

(参考: https://qiita.com/Omoti/items/a83910a990e64f4dbdf1)

layout_ fragment_main.xmlとview_room_item.xmlを追加

画像1

*Fragment:Fragment別の画面分類(Navigation利用)
*View_item: RecyclerViewのviewHolderの中のアイテムについて作成

画面layout作成後,(前に作成したlayoutをconstraintlayoutでrefactoringしました。

<layout
   xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto"
   >

fragmentのlayout作成する時 、一番上に<layout ~/>を入れないと
databindingが自動生成されないです。

Projectでメイン Package作成
Package中にメインActivity / MainFragment/MainViewModelを作成

画像2

Manifestにandroid.intent.action.VIEWを追加。

<activity android:name=".main.MainActivity">
   <intent-filter>
       <action android:name="android.intent.action.MAIN" />
       <action android:name="android.intent.action.VIEW" />
       <category android:name="android.intent.category.LAUNCHER" />
   </intent-filter>
</activity>

Androidx.lifecycle.viewModelを書くためにandroidxに変更する。Refactoring -> Migrate to Androidx

import androidx.lifecycle.ViewModel
class MainViewModel: ViewModel(){}


(参考https://developer.android.com/jetpack/androidx/migrate)

ViewModelProvidersが使うために
Build gradle (model) dependencies{}中に

implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0-alpha02'

lifecycleを入れる
(参考:http://mitoavadn.hatenablog.com/entry/2018/06/28/210500)

MainFragmentDatabinding適用 /view 連結

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
   binding = DataBindingUtil.inflate<FragmentMainBinding>(inflater, R.layout.fragment_main, container, false).also {
       it.mainRecyclerView.layoutManager = LinearLayoutManager(context)
   }
   return binding.root
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
   super.onActivityCreated(savedInstanceState)
   viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)
}

(参考https://qiita.com/Omoti/items/a83910a990e64f4dbdf1
http://sys1yagi.hatenablog.com/entry/2017/08/22/221721)


この記事が気に入ったらサポートをしてみませんか?