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库。。。。。。。。。。。

相关推荐
FrameNotWork17 分钟前
HarmonyOS 与 Android 架构对比:从“写页面”到“设计系统”的差异
android·架构·harmonyos
TAEHENGV1 小时前
基本设置模块 Cordova 与 OpenHarmony 混合开发实战
android·java·数据库
屏息3 小时前
Android 低延迟流媒体播放器实战:基于 FFmpeg 6.1.1 的 RTSP/RTMP 解决方案
android
TeleostNaCl4 小时前
Kodi | 如何使用 ADB 无 root 备份 Android 版本 Kodi 的数据并导入到另一台设备中
android·经验分享·adb·电视盒子·智能电视·tv·智能tv
csj504 小时前
安卓基础之《(10)—中级控件(4)对话框》
android
nono牛5 小时前
Android.bp 配置文件详解---gatekeeperd
android
来来走走5 小时前
Android开发(kotlin) 开发一个简单天气应用
android·kotlin
SweetCode6 小时前
汉诺塔问题
android·java·数据库
音视频牛哥7 小时前
Android 端构建高性能 RTSP 转 RTMP|轻量级RTSP服务 网关:透传与二次编码深度实践
android·音视频·大牛直播sdk·rtsp转rtmp推送·rtsp转发到rtsp服务器·rtsp转rtmp二次编码推送·rtsp二次编码加水印
方白羽7 小时前
Android 16 (Target 36) 应用适配指南
android·app·客户端