RecyclerView应用复习

2023-11-18

导包

    implementation 'androidx.recyclerview:recyclerview:1.1.0'  //recyclerview
    implementation 'com.zhy:base-rvadapter:3.0.3' // adapter 框架
    implementation 'com.github.orangegangsters:swipy:1.2.3@aar' // 上拉刷新下拉加载

应用

GridList

private RecyclerView mRecyclerView;
private List<QueryBean> mDatas = new ArrayList<>();
private RecyclerView.Adapter adapter;

private void initRecycler() {
    adapter = new CommonAdapter<QueryBean>(getActivity(), R.layout.recycler_item_grid, mDatas) {
        @Override
        protected void convert(ViewHolder holder, QueryBean queryBean, int position) {
            holder.setImageResource(R.id.item_image, queryBean.getImgId());
            holder.setText(R.id.item_content, queryBean.getName());
        }
    };

    GridLayoutManager layoutManager = new GridLayoutManager(getActivity(), 3);
    mRecyclerView.setLayoutManager(layoutManager);
    //设置分隔线
    mRecyclerView.addItemDecoration(new RecyclerView.ItemDecoration() {
        @Override
        public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
            super.getItemOffsets(outRect, view, parent, state);
            //outRect.set()中的参数分别对应左、上、右、下的间隔
            outRect.set(10, 10, 10, 10);
        }
    });
    //设置Adapter
    mRecyclerView.setAdapter(adapter);
}


private void loadData() {
    mDatas.addAll(mViewModel.getList());
    adapter.notifyDataSetChanged();
}


ListView

private RecyclerView mRecyclerView;
private List<String> mDatas = new ArrayList<>();
private RecyclerView.Adapter adapter;

private void initRecycler() {
    adapter = new CommonAdapter<String>(THIS, R.layout.recycler_item, mDatas) {
        @Override
        protected void convert(ViewHolder holder, String s, int position) {
            holder.setTextColor(R.id.item_text, Color.RED);
            holder.setText(R.id.item_text1, s);
        }
    };

    LinearLayoutManager layoutManager = new LinearLayoutManager(this);
    //设置为垂直布局,这也是默认的
    layoutManager.setOrientation(RecyclerView.VERTICAL);
    //设置布局管理器
    mRecyclerView.setLayoutManager(layoutManager);

    //设置分隔线
    mRecyclerView.addItemDecoration(new DividerItemDecoration(this, RecyclerView.VERTICAL));
    //设置Adapter
    mRecyclerView.setAdapter(adapter);

}

private void addData() {
    mDatas.add("data");
    adapter.notifyDataSetChanged();
}
    

上拉刷新下拉加载

java

private SwipyRefreshLayout mSwipeRefreshLayout;

private void initView(View view) {
    //...
    mSwipeRefreshLayout = view.findViewById(R.id.swipyrefreshlayout);
}

private void initListener() {
    mSwipeRefreshLayout.setOnRefreshListener(direction -> {
        if (direction == SwipyRefreshLayoutDirection.TOP) {
            // refresh
        }
        if (direction == SwipyRefreshLayoutDirection.BOTTOM) {
            //loadMore
        }
    });
    //...
}

private void cancelRefreshing() {
    if (mSwipeRefreshLayout.isRefreshing())
        mSwipeRefreshLayout.setRefreshing(false);
}

xml

    <com.orangegangsters.github.swipyrefreshlayout.library.SwipyRefreshLayout
        android:id="@+id/swipyrefreshlayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:srl_direction="both">

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/query_recycler"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </com.orangegangsters.github.swipyrefreshlayout.library.SwipyRefreshLayout>

单选多选

// 主动选择,防止recycleview的holder复用导致的勾选混乱                
holder.setChecked(R.id.item_select, mDatas.get(position).isSelected());
// item的单击事件
holder.setOnClickListener(R.id.item_select, v -> {
    // 通过判断checkbox是否勾选过滤数据
    CheckBox checkBox = holder.getView(R.id.item_select);
    if (checkBox.isChecked()) {
        mDatas.get(position).setSelected(true);
    } else {
        mDatas.get(position).setSelected(false);
    }
});

确定选中项

// List<QueryBean> tempList = new ArrayList<>();
StringBuilder sb = new StringBuilder();
for (QueryBean queryBean : mDatas) {
    if (queryBean.isSelected()) {
        // tempList.add(queryBean);
        sb.append(queryBean.getName());
    }
}
L.e("选中:" + sb);

删除项

List<QueryBean> tempList = new ArrayList<>(mDatas);
for (QueryBean queryBean : mDatas) {
    if (queryBean.isSelected()) {
        tempList.remove(queryBean);
    }
}
mDatas.clear();
mDatas.addAll(tempList);
adapter.notifyDataSetChanged();

关于删除,不能使用数组本身remove,如果使用fori,也不能使用递增
通过临时数组或者递减都是可以的

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RecyclerView应用复习 的相关文章

  • 计算Android设备的PPI

    如何计算 Android 设备的 PPI 最特别的是 Android 平板电脑 请注意 我想计算设备的 PPI 而不是 DPI 就像一二三一样简单 让我们来计算一下PPI to Nexus 5 例如 float LCD Diagonal 4
  • 如何强制 Eclipse 将 xml 布局和样式显示为文本?

    我最近升级到带有 ADT 20 0 3 的 Eclipse 4 2 Juno 如果我查看旧项目中的布局或样式 Eclipse 只会向我显示其适当的基于控件的编辑器 我想编辑语法突出显示的 xml 文本 我没有找到将插件的编辑器切换到此模式的
  • Twitter 登录说明

    我想在 Android 中创建一个 Twitter 应用程序 为此 我想创建一个登录页面并登录到 Twitter 为此 我们需要消费者密钥和消费者密钥 这是什么意思 要创建此登录页面 除了 Twitter 帐户之外 我们还需要其他任何东西吗
  • Android 上的 SVG 支持

    Android 支持 SVG 吗 有什么例子吗 最完整的答案是这样的 Android 2 x 默认浏览器本身不支持 SVG Android 3 默认浏览器支持 SVG 要将 SVG 支持添加到 2 x 版本的平台 您有两个基本选择 安装功能
  • 从 Android 代码设置的 SECRET_CODE

    我知道如何使用清单文件中的秘密代码 它与此源代码配合良好
  • 使用 ADB 命令获取 IMEI 号码 Android 12

    对于 11 之前的 Android 版本 我使用以下命令从我的设备获取 IMEI 号码 adb shell service call iphonesubinfo 4 cut c 52 66 tr d space or adb shell s
  • 调试:在 Android 1.0 中找不到文件

    今天我更新到 Android Studio v 1 0 在尝试编译任何项目时出现以下错误 app build intermediates classes debug 找不到文件 问题是在更新之前我没有任何问题 这是我实际尝试编译的代码 构建
  • 如何在android线性布局上获得阴影? [复制]

    这个问题在这里已经有答案了 可能的重复 如何在android中为View设置阴影 https stackoverflow com questions 4406524 how to set shadow to a view in androi
  • Android在排序列表时忽略大小写

    我有一个名为路径的列表 我目前正在使用以下代码对字符串进行排序 java util Collections sort path 这工作正常 它对我的 列表进行排序 但是它以不同的方式处理第一个字母的情况 即它用大写字母对列表进行排序 然后用
  • 调整浮动操作按钮的图标大小(fab)

    The new floating action button should be 56dp x 56dp and the icon inside it should be 24dp x 24dp So the space between i
  • 使用 Retrofit2 和 Mockito 或 Robolectric 进行 Android 单元测试

    我可以测试 Retrofit2beta4 的真实响应吗 我需要 Mockito 或 Robolectic 吗 我的项目中没有活动 它将是一个库 我需要测试服务器是否正确响应 现在我有这样的代码并卡住了 Mock ApiManager api
  • 如何检查 Android 中连接的 wifi 网络是否处于活动状态

    如何自动检查android中连接的WiFi网络上的互联网是否处于活动状态 我可以检查 wifi 是否已启用或 wifi 网络是否已连接 但我不确定如何检查互联网是否已连接 这可能吗 private boolean connectionAva
  • 获取手机的 z 轴和磁北极(而不是 y 轴)之间的角度

    我知道如何使用 getOrientation 方法获取手机 y 轴和磁北之间的方向角 如此处所述https developer android com guide topics sensors sensors position https
  • 将 Firebase 云消息传递与 Windows 应用程序结合使用

    我在 Android 和 iOS 应用程序中使用 Firebase Cloud Messaging 但是我还有此应用程序的 Windows Mac OS 版本 我想保留相同的逻辑 我知道 Firebase Cloud Messaging 可
  • 在 Android 中调整可绘制对象的大小

    我正在为进度对话框设置一个可绘制对象 pbarDialog 但我的问题是我想每次调整可绘制的大小 但不知道如何调整 这是一些代码 Handler progressHandler new Handler public void handleM
  • java.lang.NumberFormatException: Invalid int: "3546504756",这个错误是什么意思?

    我正在创建一个 Android 应用程序 并且正在从文本文件中读取一些坐标 我在用着Integer parseInt xCoordinateStringFromFile 将 X 坐标转换为整数 Y 坐标的转换方法相同 当我运行该应用程序时
  • 在 KitKat 4.4.2 中获取 SDard 路径和大小

    我在 Google Play 上有一个设备信息应用程序 在该应用程序中我有存储信息 我知道 Android 4 4 在访问外部 SD 卡方面发生了一些变化 内部似乎没有给我带来问题 我的问题是 如何可靠地获取 KitKat 上 SD 卡的大
  • Android 中循环事件的星期几和时间选择器

    我想创建一个控件 允许用户在我的 Android 活动中选择一周中的某一天 星期一 和一天中的某个时间 下午 1 00 找不到任何关于此的好帖子 好吧 我想我已经明白了 我只是不喜欢这个解决方案 因为我在一周中的某一天使用的微调器与时间选择
  • 在Android Studio gradle项目中使用NDK和STL

    我在将 stlport 链接到 Android Studio 中的 gradle 项目时遇到问题 使用 NDK 的 Eclipse Android 项目迁移到 Android Studio 该项目使用 STL 我有包含内容的 android
  • 使用单选按钮更改背景颜色 Android

    我试图通过从单选组中选择单选按钮来更改应用程序选项卡的背景 但是我不确定如何执行此操作 到目前为止我已经 收藏夹 java import android app Activity import android os Bundle publi

随机推荐

  • TabLayout源码解析和仿简书首页TabLayout效果

    初衷 想学习下源码 刚好就拿TabLayout开刀 正好产品和UI提了需求做成简书那样的效果 本来是想自己写一个的 但是ondraw里面画了几个文字textview之后 觉得可能还是在TabLayout之上二次开发来的容易 1 TabLay
  • Android性能优化系列:如何合理使用内存

    文章目录 1 Android编译器 2 内存泄漏 3 内存抖动 4 引用 5 取消部分后台服务 6 数据类型 7 自动装箱 8 Sparse数组集 9 ArrayMap 10 循环 11 枚举 12 常量 静态变量 13 字符串 14 本地
  • Vue入门【二】-- watch侦听器之普通监听与深度监听

    监听器 侦听器 侦听器是vue提供的一个简便通用的响应数据变化的方法 当需要在数据变化时执行异步或开销较大的操作时 这个方式是最有用的 监听器的写法 设有两个参数 一个是改变后的数据 一个是改变前的数据 a newVal oldVal 在监
  • AI创业江湖里的师徒帮

    https www chinaventure com cn news 82 20190708 345857 html 同门师兄弟出来创业 到中流击水 浪遏飞舟 老师们则在后方支援 成为学生们的坚实后盾 是只属于这个圈子的一道独特风景线 作者
  • 链表的认识

    目录 引入 链表的基础概念 链表的基本操作 查找节点 更新节点 插入节点 删除节点 数组和链表 引入 前面我们已经讲了重要的一种数据结构 数组 如果说数组是方便读取数据 那么今天所学习的链表便是方便写入数据的数据结构 为什么这么说呢 让我们
  • Java中创建事件监听器的五种方法

    在Java中处理事件的办法最原始的方法如下 一 使用内部类 一个个设置Button然后创建一个内部类 用ActionPerformed来实现按钮事件内容 import javax swing import java awt import j
  • jdk下载

    需要注册oracle官网的账号 下载地址如下所示 https www oracle com technetwork java javase downloads jdk8 downloads 2133151 html
  • 全面讲解 C 语言的结构体(struct),一网打尽

    点击蓝字 关注我们 因公众号更改推送规则 请点 在看 并加 星标 第一时间获取精彩技术分享 来源于网络 侵删 结构体的定义 结构体 struct 是由一系列具有相同类型或不同类型的数据构成的数据集合 也叫结构 结构体和其他类型基础数据类型一
  • Unity 3D 游戏中实现人物头上血条(血条是在 overlay 的 canvas 下)

    UI 层的血条http www manew com home php mod space uid 234410 do blog quickforward 1 id 43799
  • 给缺少Python项目实战经验的人

    我们在学习过程中最容易犯的一个错误就是 看的多动手的少 特别是对于一些项目的开发学习就更少了 没有一个完整的项目开发过程 是不会对整个开发流程以及理论知识有牢固的认知的 对于怎样将所学的理论知识应用到实际开发中更是不得而知了 以上就是我们在
  • 入门知识(一)矢量图与位图的区别

    矢量图与位图有什么区别 转自https jingyan baidu com article 54b6b9c0dbef682d583b4722 html 分步阅读 前几日有同事总是不时的问我什么是矢量图什么是位图及它们之间有什么区别 今天咱们
  • 打印1-100中3的倍数 (C语言)

    代码 include
  • MySQL安装时出现无法正常启动的问题

    我刚在官网下载了MySQL8 0 18的最新压缩包版本 跟着网络上的安装教程走 发现在cmd窗口用net start mysql命令无法正常启动 在查看my ini文件和环境变量配置没有问题之后 重新以管理员身份打开cmd窗口 仍然失败 百
  • LeetCode 2011. 执行操作后的变量值

    存在一种仅支持 4 种操作和 1 个变量 X 的编程语言 X 和 X 使变量 X 的值 加 1 X 和 X 使变量 X 的值 减 1 最初 X 的值是 0 给你一个字符串数组 operations 这是由操作组成的一个列表 返回执行所有操作
  • python--socket(套接字/插口)

    socket是什么 是进程间通信的一种方式 它与其他进程间通信的一个主要不同是 它能实现不同主机之间的进程通信 我们网络上各种各样的服务大多都是基于socket来完成通信的 例如我们浏览网页 qq聊天 收发emil Socket是应用层与T
  • 民营经济挑战未来发展

    上周末 一场 中国民营经济六十年研讨会 在北京聚集了改革领域的多位高官和专家 曲折和成就 经验和教训 理论问题和现实问题 都在会议上碰撞 此次会议由中央社会主义学院 中国经济体制改革研究会 中国民 私 营经济研究会 北京开达经济学家咨询中心
  • 创建git项目并提交

    1 创建仓库 2 点击创建 3复制gitee码云的HttpS连接 4 提交上传 打开项目并点击菜单栏上的 CVS Import into version control Create Git Repository 创建本地仓库 在打开的 C
  • 小米笔记本Pro安装Win+Mac双系统,时间同步不一致问题!

    安装win和Mac 双系统 时间同步不一样的问题 可以通过补丁解决 Win注册表CMD注入或Mac下安装注入 二选一打补丁 1 Win下操作以管理员运行CMD命令行Reg add HKLM SYSTEM CurrentControlSet
  • 基于时空网络的出租车OD需求预测-简介

    最近单曲循环的一首歌 分享给大家 1 文章信息 Contextualized Spatial Temporal Network for Taxi rigin Destination Demand Prediction 2019发在IEEE
  • RecyclerView应用复习

    导包 implementation androidx recyclerview recyclerview 1 1 0 recyclerview implementation com zhy base rvadapter 3 0 3 adap