recyclerview

Android 使用 DiffUtil 处理 RecyclerView 数据更新问题

早过忘川 提交于 2019-11-26 22:35:29
背景 RecyclerView.Adapter#notifyDataSetChanged() 会每次刷新整个布局; 每次手动调用 RecyclerView.Adapter#notifyItemXx 系列方法很麻烦; 需要在新增的项目中跟旧的列表项重复时,只更新内容,而不是插入重复项。 DiffUtil DiffUtil 就是为了简化 RecyclerVeiw 更新数据操作而生。其关键类和方法如下: 类 方法 描述 DiffUtil public static DiffResult calculateDiff (Callback cb) 根据 Callback 提供的数据分析出新旧数据列表的差异,返回 DiffResult DiffUtil.Callback public abstract int getOldListSize () 返回旧数据的数量 public abstract int getNewListSize () 返回新数据的数量 public abstract boolean areItemsTheSame (int oldItemPosition, int newItemPosition) 决定两个数据项是否是同一个 public abstract boolean areContentsTheSame (int oldItemPosition, int

张萌&韩墨羽——RecyclerView万能适配器

落花浮王杯 提交于 2019-11-26 17:51:02
RecyclerView万能适配器 效果如下 一、框架引入 先在项目的 build.gradle(Project:XXXX) 的 repositories 添加: allprojects { repositories { ... maven { url "https://jitpack.io" } } } 然后在Module的 build.gradle(Module:app) 的 dependencies 添加: dependencies { ...... compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.22' } 注意: 一旦出现加载失败的情况,只有两种情况: 一是:配置没配置好 配置没配置好,有几种情况: 只配置了 dependencies 配置 repositories,但是位置错了,build.gradle(Project:XXXX) 文件下的repositories有两个,一个是buildscript下面的,一个是allprojects下面的,要配置到allprojects下面才是对的。 版本号前面多一个v,这个是我的锅,在2.1.2版本之前都是带v的,之后(包含2.1.2)都不需要带v。 二是:网络原因 第一步:在布局文件中引入RecyclerView activity_main.xml <

RectclerView万能适配器

泄露秘密 提交于 2019-11-26 17:50:14
专用于RecyclerView第三方万能适配器 依赖 项目 maven { url “ https://jitpack.io ” } Model compile ‘com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.22’ implementation ‘com.android.support:recyclerview-v7:28.0.0’ 必须导入RecyclerView依赖 继承BaseQuickAdapter<K,T> k代表数据源的泛型 T代表BaseViewHolder 固定格式 单布局 直接调用了你的的数据源 多布局 setMultiTypeDelegate(new MultiTypeDelegate() { @Override protected int getItemType(Messages message) { return message.getType(); } }); 返回了布局的类型 getMultiTypeDelegate().registerItemType(Messages.ONE,R.layout.one) .registerItemType(Messages.TWO,R.layout.two); 参数 布局类型 布局 获得布局类型 根据布局类型判断绑定数据源的数据 多布局 adapter

Android App 卡顿分析

梦想的初衷 提交于 2019-11-26 16:49:07
极力推荐Android 开发大总结文章:欢迎收藏 程序员Android 力荐 ,Android 开发者需要的必备技能 Android App 反应卡顿,从技术上将就是UI 渲染慢。 UI渲染 是从您的应用程序生成一个框架并将其显示在屏幕上的行为。 为了确保用户与您的应用程序的交互顺利,您的应用程序应该在 16ms 内渲染帧数达到 每秒60帧(为什么60fps?) 。 如果您的应用程序因UI渲染速度缓慢而受到影响,那么系统将被迫跳过帧,用户将感觉到您的应用程序中出现卡顿。 我们把这个叫做 jank 。 本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容: 1.UI 渲染简介 2.识别Jank 3.Fix Jank 4.引起Jank 通用问题举例 1.UI 渲染简介 为了帮助您提高应用程序质量, Android 会自动监视您的应用程序是否有空,并在 Android 生命危险仪表板中显示信息。 有关如何收集数据的信息,请参阅 Play Console 文档。 如果您的应用程序出现问题,本页提供诊断和解决问题的指导。 Android 生命危险仪表板和 Android 系统会跟踪使用 UI Toolkit 的应用程序的渲染时间统计信息(应用程序的用户可见部分是从 Canvas 或 View hierarchy 绘制的)。 如果您的应用程序不使用 UI

Android开发技术周报--开源库 & App

妖精的绣舞 提交于 2019-11-26 09:33:20
本文在CSDN博客首发 转载请注明出处 http://blog.csdn.net/u011071427/article/details/71311357 本文出自Allen李的博客 开源库 & App 本文所有开源库来自Android开发技术周报,纯属个人收集。 Issue Name Description 121 Ratifier Andorid的表单验证库 121 FancyShowCaseView 一个易于使用的可定制的展示盒视图与圆形显示动画 121 Robust 美团-点评开源的新一代热更新系统 Robust,对 Android 版本无差别兼容 121 native-navigation Recative-Native的导航库 121 AutoDispose 自动绑定+处理RxJava 2 121 atlas 强大的Android动态组件框架,阿里的 122 BubbleSeekBar 自定义SeekBar,进度变化由可视化气泡样式呈现 122 android-tips-tricks Android开发的提示和技巧 122 FutureK 基于协同程序的Kotlin monadic未来实现 122 AdapterDelegates RecyclerView适配器 122 android-PictureInPicture Android 画中画的 Demo 122

适合美食的下拉刷新

≯℡__Kan透↙ 提交于 2019-11-26 03:11:38
compile 'com.github.Yalantis:pull-to-make-soup:1.0.2' maven { url 'https://jitpack.io' } 布局 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="dy.com.btn_my.MainActivity"> <com.yalantis.pulltomakesoup.PullToRefreshView android:id="@+id/pull_to_refresh" app:type="soup" android:layout_width="match_parent" android:layout_height="match_parent">

解决swipeRefreshLayout与RecyclerView的滑动冲突

蹲街弑〆低调 提交于 2019-11-26 01:13:16
网上给出的最多的滑动冲突解决办法思路:首先给RecyclerView添加滑动监听事件,其次获取recyclerView的第一个子布局的位置,如果你是上滑的话,recyclerView.getChildAt(0).getTop()获取的值肯定是个负数,当第一个item项出现,并且在顶部时swipeRefreshLayout才能启用,这样解决滑动冲突,但是这个方法在部分手机上不兼容。 网上的源码大概是这样的: recyclerView.addOnScrollListener( new RecyclerView.OnScrollListener() { @Override public void onScrolled (RecyclerView recyclerView, int dx, int dy) { super .onScrolled(recyclerView, dx, dy); int topRowVerticalPosition = (recyclerView == null || recyclerView.getChildCount() == 0 ) ? 0 : recyclerView.getChildAt( 0 ).getTop(); swipeRefreshLayout.setEnabled(topRowVerticalPosition >= 0 ); }

SwipeBack侧滑开源组件冲突问题处理

不羁的心 提交于 2019-11-26 01:12:08
SwipeBack侧滑开源组件冲突问题处理 SwipeBack github地址: https://github.com/zhibuyu/SwipeBackDemo 智能手机的大屏化,使得单手操作和侧滑返回这两个功能成为了移动开发中常见的需求,本文说的就是侧滑开源组件SwipeBack在常见布局中的一些冲突问题。 常见问题: Editext滑动冲突 RecyclerView滑动冲突 1.Editext滑动冲突 需求场景 :Editext设置单行显示许多文字时,需要左右滑动输入框内的文字,例如顶部搜索输入框。此时右滑会与侧滑返回冲突 解决方案 : 使用自定义view判断Editext何时滑动到最左端再去控制整个布局是否侧滑 public class MyEditext extends android.support.v7.widget.AppCompatEditText { private ScrollViewListener scrollViewListener = null; private boolean can_touch; public interface ScrollViewListener { void onScrollChanged(MyEditext editext, int x, int y, int oldx, int oldy); } public