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を追加
*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を作成
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)
MainFragmentにDatabinding適用 /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)
この記事が気に入ったらサポートをしてみませんか?