温馨提示  2024年 6月我们已经停止开发者板块文章内容更新,谢谢来访。存档数据
知识 2023-10-11 19 次阅读

安卓 MVVM 封装使用疑问:怎样达成?

安卓 MVVM 封装是一种常用的 安卓 开发模式,它通过将数据和视图分离,提高了代码的可维护性和可扩展性。本文将介绍如何封装安卓 MVVM,包括数据模型、视图组件、交互逻辑和动画效果等方面的封装。通过封装,可以减少代码冗余,提高开发效率,同时也能更好地支持团队开发和管理。希望本文能帮助你更好地理解和应用安卓 MVVM 开发模式。

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

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

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

一、封装数据绑定库

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

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

```

安卓 {

...

dataBinding {

enabled = true

}

}

dependencies {

...

implementation 'com.安卓.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扮演着连接视图和模型的桥梁,它负责处理视图中的数据和事件,并将结果带给模型。在安卓中,我们可使用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(安卓Schedulers.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();

}

}

```

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