Android Jatpack基礎學習
在工作中,跟技術老大接觸到了Google官方新的框架,Jatpack,可以在xml佈局裡寫事件,可以不用再寫id,不用再findViewById,ViewModel變化直接對View起作用,MVVM架構,等非常多好處,對應的介紹官方文件和網上也很全了,我今天就寫一個使用入門吧,寫的不好希望大家多多包涵,順便指出問題。
- 注意Android Studio要3.2以上的版本才行
- 有一點Kotlin語言基礎
- 準備好就開始使用入門
1.新鍵專案時選擇Fragment + ViewModel

Fragment + ViewModel
2.選擇Fragment + ViewModel後,會自動生成MainActivity,MainFragment和MainViewModel。

自動生成

目錄結構
3.到這裡還需要DataBinding,在build.gradle裡新增dataBinding enable
android { compileSdkVersion 28 defaultConfig { applicationId "com.bao.jatpack" minSdkVersion 19 targetSdkVersion 28 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } dataBinding { enabled true } }
4.在Fragment佈局檔案裡面,使用databinding,專案快速修復(顯示意圖操作和快速修復),快捷鍵Alt+Enter,或者Option+Enter,然後點工具欄的小錘子build一下,就會有MainFragmentBinding這個自動生成的類,順便繫結viewModel。

使用dataBinding
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools"> <data> <!-- 繫結viewModel --> <variable name="viewModel" type="com.bao.jatpack.ui.main.MainViewModel"/> </data> <android.support.constraint.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".ui.main.MainFragment"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="MainFragment" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> </android.support.constraint.ConstraintLayout> </layout>
5.MainFragment也要將ViewModel和dataBinding繫結,這樣繫結基本也差不多了。
class MainFragment : Fragment() { companion object { fun newInstance() = MainFragment() } private lateinit var dataBinding: MainFragmentBinding private lateinit var viewModel: MainViewModel override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { dataBinding = DataBindingUtil.inflate(inflater, R.layout.main_fragment, container, false) dataBinding.setLifecycleOwner(viewLifecycleOwner) return dataBinding.root } override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java) //繫結 dataBinding.viewModel = viewModel } }
6.寫自己需要的功能,比如viewModel初始化資料,然後顯示在view上。
class MainViewModel : ViewModel() { //xml上繫結MutableLiveData後,這裡message改變的時候,可以直接顯示 var message = MutableLiveData<String>() init { message.postValue("我是包子") } fun setMessage(){ message.postValue("我被改變了") } }
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{viewModel.message}" android:onClick="@{view -> viewModel.setMessage()}" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" />
ViewModel寫完簡單的例子,在xml裡text使用@{viewModel.message},注意格式寫法,點選事件@{view -> viewModel.setMessage()},就可以運行了,利用這個框架,不需要給這個控制元件加id,也不需要Fragment裡findViewById,再寫一堆的程式碼,讓ViewModel直接跟View對接即可。

舉個栗子
就上面這些簡單的程式碼,展示點選效果就是這樣,後面再補充別的。