免费试用

中文化、本土化、云端化的在线跨平台软件开发工具,支持APP、电脑端、小程序、IOS免签等等

android mvvm封装

MVVM(Model-View-ViewModel)是一种基于数据绑定的架构模式,它将应用程序分为三个部分:模型(Model)、视图(View)和视图模型(ViewModel)。在MVVM架构中,视图和模型之间是双向绑定的,而视图模型则扮演着连接视图和模型的桥梁。

Android开发中,MVVM架构被广泛应用,它能够帮助我们更好地组织代码、提高代码的可读性和可维护性。在MVVM架构中,我们通常会将数据绑定库和ViewModel进行封装,以便在项目中更好地使用。

下面我们将详细介绍如何在Android中封装MVVM架构。

一、封装数据绑定库

数据绑定库是MVVM架构中重要的一部分,它可以帮助我们将数据与视图进行绑定。在Android中,Google提供了自己的数据绑定库,我们可以在项目中引入该库,并对其进行封装。

1.在项目的build.gradle文件中添加以下依赖:

```

android {

...

dataBinding {

enabled = true

}

}

dependencies {

...

implementation 'com.android.databinding:library:4.0.1'

}

```

2.新建一个BaseBindingAdapter类,用于绑定数据和视图:

```

public abstract class BaseBindingAdapter extends RecyclerView.Adapter {

protected List mDataList;

protected int mLayoutId;

public BaseBindingAdapter(List dataList, int layoutId) {

mDataList = dataList;

mLayoutId = layoutId;

}

@NonNull

@Override

public BaseBindingViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

ViewDataBinding binding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), mLayoutId, parent, false);

return new BaseBindingViewHolder(binding);

}

@Override

public void onBindViewHolder(@NonNull BaseBindingViewHolder holder, int position) {

holder.getBinding().setVariable(BR.item, mDataList.get(position));

holder.getBinding().executePendingBindings();

}

@Override

public int getItemCount() {

return mDataList.size();

}

public static class BaseBindingViewHolder extends RecyclerView.ViewHolder {

private ViewDataBinding binding;

public BaseBindingViewHolder(ViewDataBinding binding) {

super(binding.getRoot());

this.binding = binding;

}

public ViewDataBinding getBinding() {

return binding;

}

}

}

```

3.在ViewModel中定义绑定数据的方法:

```

public class MainViewModel extends ViewModel {

public MutableLiveData> userListLiveData = new MutableLiveData<>();

public void getUserList() {

List userList = new ArrayList<>();

userList.add(new User("张三", 20));

userList.add(new User("李四", 21));

userList.add(new User("王五", 22));

userListLiveData.setValue(userList);

}

}

```

4.在Activity或Fragment中使用绑定数据的方法:

```

public class MainActivity extends AppCompatActivity {

private MainViewModel mViewModel;

private ActivityMainBinding mBinding;

private BaseBindingAdapter mAdapter;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

mBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);

mViewModel = new ViewModelProvider(this).get(MainViewModel.class);

mBinding.setViewModel(mViewModel);

mBinding.setLifecycleOwner(this);

mAdapter = new BaseBindingAdapter<>(new ArrayList<>(), R.layout.item_user);

mBinding.userList.setAdapter(mAdapter);

mViewModel.userListLiveData.observe(this, userList -> mAdapter.setDataList(userList));

mViewModel.getUserList();

}

}

```

二、封装ViewModel

在MVVM架构中,ViewModel扮演着连接视图和模型的桥梁,它负责处理视图中的数据和事件,并将结果传递给模型。在Android中,我们可以使用ViewModelProvider来创建ViewModel,并将其与Activity或Fragment进行绑定。

1.新建一个BaseViewModel类,用于封装ViewModel的公共方法:

```

public abstract class BaseViewModel extends ViewModel {

private CompositeDisposable mCompositeDisposable;

public BaseViewModel() {

mCompositeDisposable = new CompositeDisposable();

}

protected void addDisposable(Disposable disposable) {

mCompositeDisposable.add(disposable);

}

@Override

protected void onCleared() {

super.onCleared();

mCompositeDisposable.clear();

}

}

```

2.在MainViewModel中继承BaseViewModel,并定义自己的方法:

```

public class MainViewModel extends BaseViewModel {

public MutableLiveData> userListLiveData = new MutableLiveData<>();

public void getUserList() {

Disposable disposable = Observable.create((ObservableOnSubscribe>) emitter -> {

List userList = new ArrayList<>();

userList.add(new User("张三", 20));

userList.add(new User("李四", 21));

userList.add(new User("王五", 22));

emitter.onNext(userList);

emitter.onComplete();

}).subscribeOn(Schedulers.io())

.observeOn(AndroidSchedulers.mainThread())

.subscribe(userListLiveData::setValue);

addDisposable(disposable);

}

}

```

3.在Activity或Fragment中使用ViewModel:

```

public class MainActivity extends AppCompatActivity {

private MainViewModel mViewModel;

private ActivityMainBinding mBinding;

private BaseBindingAdapter mAdapter;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

mBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);

mViewModel = new ViewModelProvider(this).get(MainViewModel.class);

mBinding.setViewModel(mViewModel);

mBinding.setLifecycleOwner(this);

mAdapter = new BaseBindingAdapter<>(new ArrayList<>(), R.layout.item_user);

mBinding.userList.setAdapter(mAdapter);

mViewModel.userListLiveData.observe(this, userList -> mAdapter.setDataList(userList));

mViewModel.getUserList();

}

}

```

以上就是在Android中封装MVVM架构的方法,通过封装数据绑定库和ViewModel,我们可以更好地组织和管理代码,提高代码的可读性和可维护性。


相关知识:
一门app启用cookie
Cookie是一种在web浏览器与web服务器之间传递的小文本文件,用于存储用户的信息以及与用户相关的数据。在移动应用中,也可以使用Cookie来实现某些功能,比如用户登录、购物车等。一门app启用cookie的原理是:1. 用户在应用中进行登录或者其他操
2023-04-06
框架软件
框架软件是一种开发工具,它为开发者提供了一些通用的、可重用的代码和结构,用于加速和简化软件开发过程。框架软件可以包含一系列的类、接口、库、模板和其他工具,开发者可以使用这些组件来构建他们自己的应用程序。框架软件的目的是提高开发效率,减少代码的重复性,并增强
2023-04-06
APP 引导页
APP 引导页是指在用户初次打开 APP 时,为用户提供的一个简单的介绍和指引,帮助用户快速了解 APP 的功能和使用方法。引导页一般是由图片、文字和动画等元素组成,通过简洁明了的语言和视觉效果,向用户传递 APP 的核心信息。引导页的作用:1. 提高用户
2023-04-06
ios 自动打包
iOS自动打包是一种自动化工具,可以帮助开发者快速打包iOS应用程序。它可以自动完成编译、打包、签名和发布等操作,大大提高了开发者的工作效率。下面将对iOS自动打包的原理和详细介绍进行阐述。一、iOS自动打包的原理iOS自动打包的原理是利用Xcode的命令
2023-04-06
网站原生封装app
随着移动互联网的迅猛发展,越来越多的企业开始重视移动应用的开发和推广。而对于很多企业来说,原生应用是最佳的选择。因为原生应用可以提供更好的性能、更好的用户体验和更高的安全性。但是,对于很多企业来说,原生应用开发的成本和难度都比较高。这时候,网站原生封装ap
2023-04-06
h5打包成apk
在移动应用开发中,HTML5技术被广泛应用于移动应用开发中。H5应用开发方便快捷,且跨平台性好,可以在不同的设备上运行。但是,H5应用也有一些缺点,比如运行速度较慢,不能离线运行等。为了克服这些缺点,将H5应用打包成APK是一种好的解决方案。APK是And
2023-04-06
apk android app
APK是Android Application Package的缩写,是Android应用程序的安装包格式。在安装应用程序之前,Android操作系统需要将APK文件解压缩并安装应用程序。APK文件包含应用程序的所有组件,包括代码、资源、资产和manife
2023-04-06
ios免签封装步骤
iOS免签封装是指在不需要开发者账号的情况下,将自己编写的iOS应用程序打包成ipa文件,并安装到iPhone或iPad设备上的一种方法。这种方法可以让开发者或普通用户在不需要支付开发者账号费用的情况下,将自己开发的应用程序分享给其他人使用。iOS免签封装
2023-04-06
apk在打包公司的应用唯一标识
APK是Android应用程序的安装包,其中包含了应用程序的所有资源和代码。在APK中,唯一标识应用程序的是包名(Package Name)。包名是在创建Android应用程序时指定的,通常采用反向域名的方式来命名。例如,如果某个公司的域名是example
2023-04-06
react native 开发app
React Native是Facebook推出的一个跨平台移动应用开发框架,可以使用JavaScript和React构建iOS和Android应用。它将React的声明式编程模型和DOM抽象应用到移动平台,允许开发者使用类似于Web的方式进行移动应用开发。
2023-04-06
ipa发音软件ssml
SSML(Speech Synthesis Markup Language)是一种基于XML的语音合成标记语言,它可以用于控制语音合成引擎的发音、音量、语速、语调等参数,以及添加语音效果、音频文件等内容。SSML广泛应用于语音合成领域,可以用于创建自然流畅
2023-04-06
ios lbs开发
iOS LBS(Location-Based Service)开发是一种基于地理位置信息的应用开发,通过获取用户的位置信息,实现定位、导航、周边搜索等功能。其原理是利用GPS、基站定位、WIFI等技术获取用户的地理位置信息,然后将位置信息与地图、POI等数
2023-04-06