Android Jatpack官方文档
LiveData 和 Lifecycle 视频介绍
本文Github代码
在工作中,跟技术老大接触到了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对接即可。
举个栗子就上面这些简单的代码,展示点击效果就是这样,后面再补充别的。
网友评论