Android Jatpack基础学习1

作者: 进击的包籽 | 来源:发表于2019-02-17 16:23 被阅读1次

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对接即可。

举个栗子

就上面这些简单的代码,展示点击效果就是这样,后面再补充别的。

相关文章

网友评论

    本文标题:Android Jatpack基础学习1

    本文链接:https://www.haomeiwen.com/subject/xvrofqtx.html