Activity版本MVVM入门

Activity 版本MVVM入门



文章目录

  • Activity 版本MVVM入门
    • 第一章 代码结构
      • 第01节 代码结构截图
      • 第02节 结构说明
    • 第二章 代码详解
      • 第01步 添加gradle
      • 第02步 创建ViewModel类
      • 第03步 布局文件修改
      • 第04步 Activity 的改造
    • 第三章 效果展示
      • 第01节 显示效果
      • 第02节 点击处理





第一章 代码结构

第01节 代码结构截图

在这里插入图片描述



第02节 结构说明

1. 模块级别的 build.gradle 需要加入  mvvm 的 gradle
2. 需要创建一个 Java类, 作为 ViewModel, 这个类的要求是 需要继承 androidx.lifecycle.ViewModel
3. 修改布局文件 activity_main.xml 将其修改成为mvvm的结构
4. 在 MainActivity 当中, 初始化 MVVM 模式的代码





第二章 代码详解

第01步 添加gradle

代码

buildFeatures {viewBinding true
}dataBinding {enabled true
}

说明

1、位置说明:

​ 存在于 app 模块级别的 gradle 里面,需要放在 android{ … } 当中

2、原因说明:

​ 只有引入了当前的内容,后续的 MainActivity 当中才能自动创建具体的 Binding 类型



第02步 创建ViewModel类

代码

import android.util.Log;import androidx.lifecycle.ViewModel;public class DemoViewModel extends ViewModel {private static final String TAG = DemoViewModel.class.getSimpleName();// 增加了一个方法, 用于 布局当中的事件处理方案// 在布局当中采用属性, 绑定事件  android:onClick = "@{()->viewModel.show()}"public void show() {Log.i(TAG, "Hello This is My First Activity type MVVM");}
}

说明

1、注意问题:

​ 这里的 ViewModel 需要继承的是 androidx.lifecycle.ViewModel 这个类

2、方法说明:

​ 这里的 show( ) 方法是后期为了给 控件 TextView 增加的点击事件处理。



第03步 布局文件修改

代码


<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><import type="svip.chc.DemoViewModel" /><variablename="viewModel"type="DemoViewModel" />data><androidx.constraintlayout.widget.ConstraintLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="@{()->viewModel.show()}"android:text="Hello World!"android:textSize="60sp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" />androidx.constraintlayout.widget.ConstraintLayout>
layout>

说明

1、结构说明

​				<根布局>​				

2、事件处理

​ 对于事件处理的方式存在多种写法,这里不做一一列举。

​ 目前采用的写法格式是 android:onclick="@{()->viewModel.show()}"

​ 在事件处理当中的 viewModel 是上面 标签当中定义的 name 属性值



第04步 Activity 的改造

代码

import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.ViewModelProvider;import android.os.Bundle;import svip.chc.databinding.ActivityMainBinding;public class MainActivity extends AppCompatActivity {// 这里的 ViewModel 是一个 Java 类的对象名称, 需要在 onCreate() 等方法当中, 进行初始化private DemoViewModel viewModel;// 这里的 ActivityMainBinding 是一个自动生成的类对象, 他是我们在 gradle 当中, 配置 android{...} 内部两个标签后生成的private ActivityMainBinding binding;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 如果采用的是 MVVM 的方式, 就不要直接采用下面的方式去设置布局了。// setContentView(R.layout.activity_main);// ------------------------------// 我们需要给上面的两个成员变量进行初始化, 在初始化的过程中, 设置布局方式和事件监听// 1. 初始化 binding 对象binding = ActivityMainBinding.inflate(getLayoutInflater());// 2. 设置布局的方式setContentView(binding.getRoot());// 3. 初始化 viewModel 对象viewModel = new ViewModelProvider(this).get(DemoViewModel.class);// 4. 通过 binding 对象, 绑定 ViewModelbinding.setViewModel(viewModel);// 5. 设置生命周期的所有者, 让事件监听能够生效binding.setLifecycleOwner(this);}
}

说明

1、布局整改

​ 将原始的设置布局的方式,需要修改成为 setContentView(binding.getRoot());

2、对于成员变量需要定义两个

​ 他们分别是 bindingviewModel

​ 两个成员变量都要完成初始化的过程,以及初始化完毕之后的,绑定过程。

3、需要注意的两件事情:

​ 第一件事情: binding 的类型是自动生成的,他是在我们 appgralde 当中添加两段代码之后,才能自动生成

​ 第二讲事情: 如果没有设置生命周期的所有者,点击事件的监听会失效





第三章 效果展示

第01节 显示效果

在这里插入图片描述



第02节 点击处理

在这里插入图片描述










本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部