Android MVVM框架搭建(四)RecyclerVIew + ViewPager2 + BaseQuickAdapter

然后进入到MainViewModel中,在里面增加如下代码:

public LiveData wallPaper;

public void getWallPaper() { wallPaper = new MainRepository().getWallPaper(); }

现在访问接口数据这一块就搞定了,下面就是显示出来就可以了。

四、RecyclerView显示数据


因为返回的数据比较多,因此通过RecyclerView来进行显示,作为壁纸显示可以通过更改布局管理器,把列表变成纵向两列的形式去显示,首先我们先修改activity_main.xml的布局代码,如下图所示在这里插入图片描述

这里我去掉了页面的居中布局,然后增加了一个RecyclerView,添加了一个id,同事改了一下CustomImageView的scaleType=“fitXY”,这样可以让我们的壁纸完整呈现出来。

这里我需要修改一下CustomImageView类的代码:

在这里插入图片描述

其实就是改它所继承的父类,为什么要这么改呢?现在就来说明一下。下面我们写一个列表适配器的item布局,在layout下新建一个item_wall_paper.xml文件,里面的代码我们先不写,先去写一个样式,在themes.xml文件中(老版本的AS中是styles.xml),增加如下样式代码:

这里是设置一个圆角图片的样式代码,那么怎么去使用它呢,下面我们修改一下item_wall_paper.xml,代码如下:

<?xml version="1.0" encoding="utf-8"?>

<layout xmlns:android=“http://schemas.android.com/apk/res/android”

xmlns:app=“http://schemas.android.com/apk/res-auto”>

<variable

name=“wallPaper”

type=“com.llw.mvvm.model.WallPaperResponse.ResBean.VerticalBean” />

<LinearLayout

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:orientation=“vertical”>

<com.llw.mvvm.view.CustomImageView

networkUrl=“@{wallPaper.img}”

android:layout_width=“match_parent”

android:layout_height=“300dp”

android:layout_margin=“5dp”

android:scaleType=“centerCrop”

app:shapeAppearanceOverlay=“@style/roundedImageStyle” />

这里依然是使用DataBinding,因为我们数据是要显示在列表上的,因此直接绑定item就可以了,然后这里我用的是networkUrl的属性,因为你如果使用了biyingUrl会添加一个前缀,而这个API不需要前缀,同时我把刚才写的样式设置了进来,这里就解释了为什么要更改继承的父类,因为之前的那个父类没有这个属性值,这个属性值可以让你的Image图片做很多的形状上的变化,相当Nice! 这样就不用再去导入其他的依赖库或者使用自定义View了,这得力于Material,关于ShapeableImageView更多的介绍可以看一下这一篇文章:Android Material UI控件之ShapeableImageView,如果你感兴趣的话。

好了回到正题,那就是我们现在布局都已经写好了,下面写一个适配器,在com.llw.mvvm包下新建一个adapter包,adapter包下新建一个WallPaperAdapter类,里面的代码如下:

public class WallPaperAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

/**

  • 传递过来的数据

*/

private final List<WallPaperResponse.ResBean.VerticalBean> verticalBeans;

public WallPaperAdapter(List<WallPaperResponse.ResBean.VerticalBean> verticalBeans) {

this.verticalBeans = verticalBeans;

}

@NonNull

@NotNull

@Override

public RecyclerView.ViewHolder onCreateViewHolder(@NonNull @NotNull ViewGroup parent, int viewType) {

ItemWallPaperBinding binding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.item_wall_paper, parent, false);

return new ViewHolderWallPaper(binding);

}

@Override

public void onBindViewHolder(@NonNull @NotNull RecyclerView.ViewHolder holder, int position) {

ItemWallPaperBinding binding = ((ViewHolderWallPaper) holder).getBinding();

binding.setWallPaper(verticalBeans.get(position));

binding.executePendingBindings();

}

@Override

public int getItemCount() {

return verticalBeans.size();

}

private static class ViewHolderWallPaper extends RecyclerView.ViewHolder {

private ItemWallPaperBinding binding;

public ItemWallPaperBinding getBinding() {

return binding;

}

public void setBinding(ItemWallPaperBinding binding) {

this.binding = binding;

}

public ViewHolderWallPaper(ItemWallPaperBinding inflate) {

super(inflate.getRoot());

this.binding = inflate;

}

}

}

这就是RecyclerView.Adapter的常规使用而已,很简单,其中要注意的就是DataBinding的使用,这个很关键了,它决定了你的数据与xml绑定。下面我们回到MainActivity中,首先增加一个initView()方法,里面的代码如下:

/**

  • 初始化

*/

private void initView() {

GridLayoutManager manager = new GridLayoutManager(this, 2);

dataBinding.rv.setLayoutManager(manager);

}

然后在onCreate方法中调用它并且实现数据更新的回调监听。

initView();

//热门壁纸 网络请求

mainViewModel.getWallPaper();

mainViewModel.wallPaper.observe(this, wallPaperResponse -> dataBinding.rv.setAdapter(new WallPaperAdapter(wallPaperResponse.getRes().getVertical())));

下面我们可以开始运行了,效果图如下:

在这里插入图片描述

由于这个平台的限制,所以这个动图是标清,建议读者可以直接安装APK去体验,这样会更舒服一些。这个图片展示的效果就很不错,现在我们已经掌握了怎么在MVVM中使用RecyclerView。

五、绑定点击事件


当我们需要点击查看图片的时候,就需要先绑定点击事件,然后查看图片,在适配器WallPaperAdapter中增加一个ClickBinding内部类,里面的代码如下:

public static class ClickBinding {

public void itemClick(WallPaperResponse.ResBean.VerticalBean verticalBean, View view) {

Intent intent = new Intent(view.getContext(), PictureViewActivity.class);

intent.putExtra(“img”, verticalB

  • 10
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android MVVM框架搭建需要使用Java语言。MVVM框架是一种基于模型-视图-视图模型的设计模式,它可以帮助开发者更好地组织和管理Android应用程序的代码。在搭建MVVM框架时,需要使用一些常用的开源框架,如Data Binding、LiveData、ViewModel等。同时,还需要了解一些基本的Android开发知识和Java语言的基础知识。搭建MVVM框架需要一定的技术水平和经验,但是它可以提高应用程序的可维护性和可扩展性,让开发者更加高效地开发Android应用程序。 ### 回答2: 在Android开发过程中,MVVM框架已经成为了一种非常流行的设计模式,因为它能够很好地解决传统的MVC模式中存在的问题。这篇文章将着重讲解如何使用Java来构建MVVM框架MVVM框架主要由三个部分组成:View、ViewModel和Model。其中,View指的是用户界面;ViewModel则是View和Model之间的中间层,它包含View所需的数据和业务逻辑;而Model则是数据层,负责从数据源中获取和管理数据。 在Java中构建MVVM框架,可以使用以下几个关键技术: 1. Data Binding:Data Binding是一种新兴的技术,可以轻松地将数据绑定到用户界面上。在Android中,Data Binding库已经成为了MVVM框架构建中不可少的一部分。 2. LiveData:LiveData是Jetpack组件库中的一部分,它是用于构建响应式应用程序的一种强大的工具,也是MVVM模式的关键组成部分。LiveData可以监听数据源中的更改,并在数据发生变化时通知ViewModel。 3. ViewModel:ViewModel是MVVM中的重要组成部分,主要用于保存状态、管理数据和处理业务逻辑。它允许View对Model进行观察,从而实现MVVM框架的完整性和数据驱动。 4. RxJava:RxJava是一种Reactive编程框架,可以用于处理异步事件流,并在应用程序中实现非阻塞的、响应式编程。RxJava可以与MVVM框架结合使用,使架构更加灵活和响应。 搭建MVVM框架的过程中,首先需要创建View、ViewModel和Model三个关键组件。ViewModel将负责将Model的数据更新到View上,并处理业务逻辑。此外,使用Data Binding和LiveData建立数据流,实现双向数据绑定,保持ViewModel和View的同步。 最终,使用RxJava将ViewModel和View解耦,实现响应性和灵活性。在整个MVVM框架中,使用Java构建时需要注意的重要细节包括内存泄漏问题、持久性存储问题等等,尽可能地在代码编写时去考虑这些问题,以确保框架的可靠性和稳定性。 总而言之,使用Java搭建MVVM框架需要一定的技术积累和编码能力,但这种框架Android开发中已经被广泛应用,相信有机会成为您的一个不错的选择。 ### 回答3: MVVM是Model-View-ViewModel的缩写,是一种软件架构模式。在安卓应用开发中,我们可以利用MVVM框架搭建Java开发项目,实现数据和用户交互分离,让代码更加清晰易懂,可读性更高。 MVVM架构中,Model代表实体模型,View代表图形界面,ViewModel作为桥梁连接Model和View,负责将Model转化成View的形式,以及监听View的变化反向更新Model。 在搭建Android MVVM框架时,我们需要先定义布局文件,将View的控件和ViewModel关联。然后定义ViewModel类,在类中添加模型数据和业务逻辑。最后,在Activity或Fragment中实现ViewModel的数据绑定和监听,将数据和页面连接起来。 在Java开发中,我们可以利用一些主流的MVVM框架,例如Google官方提供的Android Architecture Components框架,它包含LiveData、ViewModel、Room和DataBinding四个组件,能够快速搭建MVVM架构,实现组件之间的数据通信和交互。 除此之外,还有Databinding框架,它可以在布局文件中直接绑定数据,省去了一些繁琐的代码,但是需要一定的学习成本。 总而言之,MVVM框架搭建Java项目是非常有利于提高代码可维护性和可读性,通过桥梁连接View与Model,让开发更加高效。不同的情况需要使用不同的框架,开发者可以根据自己的需求进行选择。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值