当前位置: 首页 > article >正文

Kotlin jetpack MVP

开启dataBinding

app build.gradle

android {
	buildFeatures {
        dataBinding true
    }
}
  • 一些依赖库
	def lifecycle_version = "2.4.1"
    // https://developer.android.google.cn/jetpack/androidx/releases/lifecycle?hl=en
    // LiveData
    api "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
    // ViewModel
    api "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
    // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process
    api "androidx.lifecycle:lifecycle-process:$lifecycle_version"
    // Lifecycles only (without ViewModel or LiveData)
    api "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version"
    // 在Activity中使用viewModels
    api "androidx.activity:activity-ktx:1.3.1"
    // 在Fragment中使用viewModels
    api "androidx.fragment:fragment-ktx:1.3.6"

基类

abstract class BaseActivity<VDB : ViewDataBinding>(private var contentViewID:Int){
	protected lateinit var binding: VDB

	@CallSuper
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = DataBindingUtil.setContentView(this, contentViewID)
    }
}

子类

class MainActivity : BaseActivity<ActivityMainBinding>(R.layout.activity_main){

    private val xVM: XxxxVM by viewModels()
    // 发起任务
  	xVM.getXx(xId)
	// 处理结果
	xVM.xLiveData.observe(this) { bid ->
    }
}

xml布局

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <data>

    </data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <FrameLayout
            android:id="@+id/container"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1" />

        <include
            android:id="@+id/tabLayout"
            layout="@layout/tab_main_activity" />

    </LinearLayout>
</layout>

处理任务的ViewMode

class BindBrandVM : ViewModel() {
    val xLiveData = MutableLiveData<String>()

    fun getXx(x: String) {
        RetrofitManager.api.xxxxx(FormBody.Builder()
            .add("xxx", x)
            .build())
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(object : BaseSubscriber<BaseHttpEntity<XxxxRes>>() {
                override fun onErr(throwable: Throwable) {}
                override fun onNext(res: BaseHttpEntity<XxxxRes>) {
                    super.onNext(res)
                    try {
                        if (res.result != null) {
                            val bid = res.result!!.bid
                            xLiveData.value = bid
                        }
                    } catch (e: java.lang.Exception) {
                    }
                }
            })
    }
}

还可以添加其他jetpack库。。。。。。。。。。。


http://www.kler.cn/a/396744.html

相关文章:

  • SobarQube实现PDF报告导出
  • 【从零开始的LeetCode-算法】3270. 求出数字答案
  • 时钟之CSS+JS版
  • World of Warcraft [WeakAuras]Barney Raid Kit - Collapsing Star Indicator
  • python makedirs() 详解
  • MySQL技巧之跨服务器数据查询:基础篇-更新语句如何写
  • sql server 查看io资源使用
  • Docker环境搭建Cloudreve网盘服务(附shell脚本一键搭建)
  • 【从零开始的LeetCode-算法】3270. 求出数字答案
  • 使用阿里云远程访问 Synology Web Station 的指南
  • JMeter初体验:从入门到入门的性能测试之旅
  • 万字长文解读机器学习——KNN
  • 鸿蒙NEXT应用示例:切换图片动画
  • RK3568平台开发系列讲解(GPIO篇)GPIO的sysfs调试手段
  • 四:HTTP的诞生:它解决了哪些网络通信难题?
  • 使用Redis的一些经验总结
  • 我与Linux的爱恋:进程间通信 匿名管道
  • 【系统架构设计师】真题论文: 论软件可靠性评价(包括解题思路和素材)
  • PyQt入门指南六十 与Python其他库的集成方法
  • 『VUE』27. 透传属性与inheritAttrs(详细图文注释)
  • unity小:shaderGraph不规则涟漪、波纹效果
  • axios 实现 无感刷新方案
  • 哈佛商业评论 | 未来商业的技术趋势:百度李彦宏谈技术如何变革商业
  • Java集合 List——针对实习面试
  • hot100--数组
  • 数据研发基础| 什么是数据漂移