IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android RecycledView局部刷新的方法 -> 正文阅读

[移动开发]Android RecycledView局部刷新的方法

问题的引入和闲话一堆

最近在做项目了,在项目过程中遇到很多问题,也基本对应地找到了解决方法,并从中获取知识,收获不小

在项目过程中遇到过这样一个问题,我需要使设置模块的设置项在选中时出现高亮效果

即在点击一个设置项时,除了在fragment里加载对应页面外,还需要在设置项的RecycledView里局部刷新某个item

我开始了思考,我们的每个item使用的都是一个布局页面,在我们这里是不可能通过id来找到需要改变属性的控件的,那么怎么才能对一个item作出修改而不影响别的item呢,对了!在加载RecycledView之前我们是需要自定义一个adapter适配器的,在适配器中有一个记录item索引值的position属性,我们不知道item的位置,但是adapter知道啊,于是我上网进行了查阅,果然找到了Android之RecyclerView的局部刷新

这篇博客大概是介绍了adapter为我们提供的item局部刷新的一些api

于是我进入了代码进行查看:
在这里插入图片描述果然,出现了一堆api,其中红框标出的notifyItemChanged()方法需要一个position参数,言简意赅,通知item改变,我们要找的应该就是它了,只要对需要加载的列表中属性对象的属性进行修改,再调用这个方法对其进行加载,不就可以实现局部刷新了吗?

实体类

为了找到position索引值,我在需要传入的列表的对象中加入了int type属性,表示位置信息,再加入int backgroundId属性,表示对应是否高亮的背景资源文件。

代码如下:
对了,因项目保密信息,这里只放一部分代码,用于阐述事件。

在这里插入图片描述

如图,R.color.white表示item的非高亮背景,R.drawable.shape_four_corner_blue表示item的四个圆角的蓝色高亮效果背景,也就是说,在item被点击时,我们需要对其背景进行修改,将点中的item背景设置为高亮,将之前的item背景设置为非高亮,当然,前提是当前点中的不是之前高亮的item。可能语言说明比较不太容易理解,看看代码:

方法封装

在Activity中先声明一个自定义适配器对象

BaseQuickAdapter adapter = new SettingAdapter(initSettingTypeList());

并且声明一个SettingType类的空对象,用于表示点击item时之前一个高亮的item,其中SettingType是实体的枚举类,上面图上已有

private SettingType preSettingType = null;

这两个对象要声明在类下,不能声明在onCreate()方法里,不然后面封装方法时会超出其作用域

    private void itemBackgroundChanger(SettingType settingType) {
        settingType.backgroundId = R.drawable.shape_four_corner_blue;
        if (preSettingType != null) {
            preSettingType.backgroundId = R.color.white;
            adapter.notifyItemChanged(preSettingType.type);
        }
        adapter.notifyItemChanged(settingType.type);
        preSettingType = settingType;
    }

这是改变item背景资源文件的方法,将传入的settingType的backgroundId属性值设为高亮。

在preSettingType不为空时,做出之前所讲述操作,将之前高亮的item设为非高亮,局部刷新。随后将点击的item设为高亮,局部刷新。最后一步,将当前点击的item赋值给preSettingType,下次点击时,它就是上一次被点击的item了,代代相传。

方法封装好了,那么我们只要在使用时调用也就好了,那什么时候调用呢,调用的地方需要满足两个条件:

  1. 在item被点击时能作出响应
  2. 能够知道当前点击的item是哪个,这样我们才能传入settingType参数

在出现这个问题之前我写过一个public void replaceFragment(SettingType settingType)方法,用来在点击item时替换fragment。由于他本身接收一个settingType参数,所以满足第二个条件,而它本身作为一个封装好的方法,我是准备在item的点击事件的回调方法逻辑中调用它的,所以它一定满足第一个条件。如果看到这里你不明白,没关系,可以继续往下看,后面的代码一出来应该就明白了。
public void replaceFragment(SettingType settingType)中加入以下逻辑

public void replaceFragment(SettingType settingType){
	...
	//对高亮item进行刷新
    if (!settingType.equals(preSettingType)){
        itemBackgroundChanger(settingType);
    }
	...
}

这段代码的意思是,如果当前点击的item不是本身高亮的item,那么调用itemBackgroundChanger()方法对背景进行刷新。

调用方法实现局部刷新

接下来看看怎么实现方法调用的吧

adapter同样提供了api用来响应item的点击事件:
在这里插入图片描述
先看下面这个红框,在onItemClick()方法中可以书写item点击时发生的逻辑,这里我调用了adapter.getItem(position)获取到了当前点击的item对应的SettingType实例,然后将其传入replaceFragment()进行fragment界面加载,由于刚才我们在replaceFragment()方法中加入了itemBackgroundChanger()方法的调用,所以高亮的局部刷新代码也被调用了。

现在,你的逻辑应该清晰了吧,如果还是不太理解,没关系,我们再看一次,想象一下一个横屏的设置页面,左边是设置项的列表,右边是设置项的页面,就像这样
在这里插入图片描述
我们想要用户在进入设置界面的时候,右边默认就显示第一个item的界面,即屏幕亮度界面,而不是说右边就一片空白,怎么实现?

我们需要在Activity加载的时候就加载fragment,对吧,即在onCreate()方法中去写加载fragment的逻辑,由于逻辑已经封装到replaceFragment()方法中了,所以直接调用就行,由于replaceFragment()方法中也调用了itemBackgroundChanger()方法用来高亮当前被加载的fragment界面,所以用户第一次进入设置界面时,右边是屏幕亮度界面,左边列表中屏幕亮度被高亮,那么代码是怎样的呢?

看看刚才那张图的第一个红框吧,就这么简单,一行代码

replaceFragment(settingTypeList.get(0));

settingTypeList的初始化代码我就不放了根据名字就知道是settingType 的list,具体有的settingType实例在上面的枚举类中都有了,就是所有的设置项

这里的意思就是列表的第一个元素传入replaceFragment()方法进行加载,第一个元素对应的就是屏幕亮度啊,就这么简单,在加载fragment的时候也设置好了高亮。

到这里,RecycledView的局部刷新就介绍完了,因为是项目代码,所以不能全部放出来,但是实现的主要代码都展现出来了,大家自己去敲敲代码尝试一下就明白了,有些地方可能我没讲清楚,希望大家谅解!另外,如果有需要可以留言,欢迎大家和我交流!

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章           查看所有文章
加:2021-08-10 13:32:03  更:2021-08-10 13:34:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 7:50:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码