Android MVVM Demo

AndroidMvvm练习

AndroidMVVM 是Google推出的,网上介绍也有很多,我就不废话了,公司项目中使用的mvvm,我整理个小demo练习记录一下

1.DataBinding

配置

 dataBinding {
        enabled = true
    }

在XML中使用, 原先的布局还是照常写

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

        <variable
            name="viewModel"
            type="com.pltest.mvvmtest.MainActViewModel" />
    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">

        <!--    // 点击事件可以在act中设置  也可以在XML 直接写-->
        <Button
            android:id="@+id/btGet"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="getData"
            android:textAllCaps="false"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

2.ViewModel

新建ViewModel,继承至ViewModel

class MainActViewModel : ViewModel()

在Activity中获取实例

 private val mViewModel by lazy {
        ViewModelProviders.of(this).get(MainActViewModel::class.java)
    }

XML中声明的VIewModel

 <data>
        <variable
            name="viewModel"
            type="com.pltest.mvvmtest.MainActViewModel" />
    </data>

XML中的VIewModel 和ViewModel实例绑定

mBinding.viewModel = mViewModel

在ViewModel 中声明LiveData

 private val _countLive = ObservableField<String>()
    val countLive get() = _countLive
    private fun refreshCount() {
        _countLive.set("当前条数 : " + _dataLive.value?.size)
    }

    private val _dataLive = MutableLiveData<MutableList<Bean>>()
    val dataLive get() = _dataLive
    private fun setData(list: MutableList<Bean>) {
        _dataLive.value = list
        refreshCount()
    }

在xml中可以直接设置监听ViewModel的数据变化 以及点击事件

<Button
            android:id="@+id/btAdd"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="@{()->viewModel.addData()}"
            android:text="addData"
            android:textAllCaps="false"
            app:layout_constraintLeft_toRightOf="@id/btGet"
            app:layout_constraintTop_toTopOf="parent" />

        <TextView
            android:id="@+id/tvCount"
            android:layout_width="wrap_content"
            android:layout_height="0dp"
            android:gravity="center"
            android:text="@{viewModel.countLive}"
            android:textSize="18sp"
            app:layout_constraintBottom_toBottomOf="@id/btAdd"
            app:layout_constraintLeft_toRightOf="@id/btAdd"
            app:layout_constraintTop_toTopOf="parent" />

在Activity中设置LiveData回调监

  mViewModel.apply {
            dataLive.observe(this@MainActivity, Observer {
                mAdapter.setData(it)
            })

            onItemChangeLive.observe(this@MainActivity, Observer {
                mAdapter.notifyItemChanged(it)
            })
        }

在列表中的点击事件,调用ViewModel中的方法。进行逻辑处理。操作数据

    fun onItemClick(position: Int) {
        if (position > _dataLive.value?.size ?: 0) return
        val data = _dataLive.value ?: return
        data[position].isSelect = !data[position].isSelect
        _onItemChangeLive.value = position
    }

最后附demo地址:https://github.com/13522280478/AndroidMVVMTest.git

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android MVVM Demo 是一个基于 MVVM(Model-View-ViewModel)设计模式的 Android 应用示例。这个 Demo 可以让开发者学习 MVVMAndroid 开发中的应用。 这个 Demo 的视图部分、模型部分以及 ViewModel 部分都是独立的。视图部分只用来展示数据及响应用户操作,模型部分只用来管理业务逻辑和数据操作,而 ViewModel 部分则是中间人,负责协调视图和模型之间的交互。 ViewModel 应该提供给视图数据绑定的 Observable 对象,这些 Observable 对象实际上是可观察的数据源。当 ViewModel 中的可观察数据源中的数据发生变化时,这些数据则会自动更新到视图中,从而达到实时同步的效果。 这个 Demo 的视图部分使用了 Android 原生的 Data Binding 技术,来实现视图与 ViewModel 的绑定。当视图需要更新 ViewModel 的数据时,只需要将这些数据绑定到视图上。而对于用户输入的操作,则由 ViewModel 中的命令类来监听并作出相应的反应。 总的来说,这个 Demo 给开发者提供了一个简单、可读性高、封装性强的 MVVM 示例。这个示例既可以为 MVVM 模式的初学者提供基础知识,也可以为实际应用场景的开发提供不少参考。 ### 回答2: Android MVVM(Model-View-ViewModel)是一种设计模式,其中视图通过数据绑定与ViewModel进行通信。ViewModel处理从Model获取的数据,并将其暴露给View,以便视图可以更新其状态。此外,ViewModel可以在用户界面和后端之间充当中间人,并处理业务逻辑。 Android MVVM demo演示了如何在Android应用程序中使用MVVM设计模式。这个demo使用了Android的数据绑定库和LiveData组件。在这个demo中,我们创建一个简单的登录应用程序,在用户输入用户名和密码之后验证用户凭据。我们使用ViewModel来存储和管理用户输入和验证状态,以及LiveData来观察ViewModel中的数据变化并将其更新到用户界面。在用户输入凭据时,ViewModel负责更新LiveData,从而更新UI组件。此外,我们还使用了数据绑定库,它允许我们直接将UI组件绑定到ViewModel中的属性,以便它们可以自动更新。 通过使用MVVM设计模式,我们可以将UI逻辑与业务逻辑分离,从而使我们的代码更易于管理和测试。此外,使用LiveData来观察ViewModel中的数据变化还可以减少我们的代码量和逻辑复杂度。通过观察LiveData,我们可以在需要更新UI时自动更新UI组件,而不必手动处理每个UI组件。这使得我们的代码更加简单,易于维护。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值