recyclerview

自定义View之数字键盘 (NumberKeyboardView)⌨️

岁酱吖の 提交于 2019-12-27 18:04:00
在实际开发中,我们通常会遇到自定义键盘输入内容的情况,比如微信中的输入支付密码,验证码等场景,往往这些键盘都比较简单,通常是输入数字和小数点等内容,本篇文章将通过组合已有控件,打造一款通用的数字键盘 ⌨️ 仓库地址: https://github.com/plain-dev/NumberKeyboardView 库清单🧾 首先列觉一下本控件所用到的库 RecyclerView 数字键盘本体,承载键盘的按键的显示,响应输入等 BaseRecyclerViewAdapterHelper 一个强大的RecyclerView适配器库,封装常用逻辑,让适配器更加简洁 效果演示 ⌨️ 实现过程 数字键盘View 一开始想起来做数字键盘的时候,第一个想到的是 GridLayout ,然后想到了 GridView ,前者可以很好的实现这种需求,但扩展性不高,后者做这种网格布局是再适合不过了,但现在有了 RecyclerView 则不需要 GridView 了,因为 RecyclerView 通过指定布局管理器,可以实现多种布局效果,这里我们就用到了 GridLayoutMananger 这里我们继承 RelativeLayout 来承载此View,里面则是一个 RecyclerView class NumberKeyboardView @JvmOverloads constructor (

[Android]使用RecyclerView替代ListView(一)

送分小仙女□ 提交于 2019-12-27 10:18:54
1、技术问题:Android 中使用 RecyclerView 创建列表   解决方案: android v7兼容包RecyclerView的使用(一) 2、技术问题:如何为RecyclerView添加头部   解决方案: http://www.tuicool.com/articles/qMnAfen 3、技术问题:在图片中心显示文字   解决方案:使用FrameLayout,将TextView中的android:griverty = true 4、技术问题:Android中使用CardView 创建动态卡片   解决方案: http://www.myexception.cn/android/2053172.html 5、技术问题: Android中的RecyclerView如何实现项目条数的动态添加和删除   解决方案: http://doc.okbase.net/a396901990/archive/107839.html 6、技术问题:更改状态栏的颜色   解决方案: Android 五步修改状态栏颜色 7、技术问题:RecyclerView如何局部刷新其中的Item   解决方案: [Android]使用RecyclerView替代ListView(一) 8、技术问题:RecyclerView如何实现下拉刷新和上拉加载而更多   解决方案: http://blog.csdn

RecyclerView让列表嵌套如此简单

最后都变了- 提交于 2019-12-26 17:51:14
平常开发时,相信像这样的页面,大家一定是遇到过的。这里比较坑爹的地方在于呢:列表嵌套。订单列表中的每一项,都包含一个商品列表。像这种需求,大家会如何实现呢? 这里呢,说一下我自己的思路,我没有使用列表嵌套,而是,将原有的Order拆分成了三个布局类型:Head、Body、Foot,一个Body就是一个商品,有多个商品就有多个Body。 然后,使用我自己封装的一套Adapter,让多布局更加简单易用。关于我的这个Adapter库,详见: Adapter的封装之路 不过,这里稍稍麻烦的一点就是,得到网络数据之后,我们需要对原始的List<Order>进行加工,转换成我们需要的List<LayoutWrapper>,具体转换的方法,类似于我这里的mockData里面的方法。 每一个LayoutWrapper都会持有:布局id、实体类、实体的展示类 其实,这里的实体展示类,如果是公用的,最好不要做成内部类,做成外部类 /** * 今日订单数 * <p> * 作者:余天然 on 2017/3/6 下午12:01 */ @Route(path = "/home/order") public class TodayOrderActivity extends BaseActivity { @BindView(R.id.rv_content) RecyclerView rvContent; int[

Android RecyclerView 使用解析

微笑、不失礼 提交于 2019-12-26 05:41:20
RecyclerView出现已经有一段时间了,相信大家肯定不陌生了,大家能够通过导入support-v7对其进行使用。 据官方的介绍,该控件用于在有限的窗体中展示大量数据集。事实上这样功能的控件我们并不陌生。比如:ListView、GridView。 那么有了ListView、GridView为什么还须要RecyclerView这种控件呢?总体上看RecyclerView 架构 ,提供了一种插拔式的体验,高度的解耦,异常的灵活,通过设置它提供的不同LayoutManager,ItemDecoration , ItemAnimator实现令人瞠目的效果。 你想要控制其显示的方式。请通过布局管理器LayoutManager 你想要控制Item间的间隔(可绘制)。请通过ItemDecoration 你想要控制Item增删的动画,请通过ItemAnimator 你想要控制点击、长按事件,请自己写(擦,这点尼玛。 ) 基本使用 鉴于我们对于ListView的使用特别的熟悉,对照下RecyclerView的使用代码: <code class="language-java hljs has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family:

RecyclerView性能优化及高级使用

你说的曾经没有我的故事 提交于 2019-12-23 09:12:04
最近研究应用流畅度专题时,发现RecyclerView里边的坑真多,有很多可以优化的点,在理解优化点之前,最好对RecyclerView的缓存机制有一些了解,比如得知道CacheView和RecycledViewPool的区别和联系,RecyclerView的绘制流程有一定了解,再来谈RecyclerView的性能提升。缓存机制可以看看这篇文章:基于滑动场景解析RecyclerView的回收复用机制原理 还有一篇外国人写的,ViewHolder的探究,这篇文章把RecyclerView的各级缓存作用剖析得很清晰,以前看过很多人写的文章,感觉都是一知半解,总结下: 1、RecyclerView缓存 1.1 RecyclerView主要有三级缓存: (1)Attached scrap & Changed scrap ArrayList<ViewHolder> mAttachedScrap 主要用在插入或是删除itemView时,先把屏幕内的ViewHolder保存至AttachedScrap中,作用在LayoutManager中,它仅仅把需要从ViewGroup中移除的子view设置它的父view为null,从而实现了从RecyclerView中移除操作detachView()。需要新插入的view从cacheView/Pool中找,没找到则createViewHolder

RecyclerView 焦点问题

我只是一个虾纸丫 提交于 2019-12-23 04:28:10
Android TV项目要求为RecyclerView列表增加焦点循环与翻页功能,本身功能不难实现,就是滚动列表,然后重定位焦点即可; 不过实际测试发现经常有焦点丢失的问题,让人十分头痛。 先看其中一个现象: 现象:焦点位于第一个item,向上移动,焦点定位到最后一个item,向下移动,焦点重新回到第一个item,再次向上移动,虽然有滚动到列表的底部,但是焦点丢失了。 分析:通过log发现,第二次向上移动时,最后一个item没有跑Adapter的onBindViewHolder函数,导致onBindViewHoler中设置焦点的代码没有跑 if (selectedPosition == position) { holder.container.requestFocus(); } 再分析log发现,第一次打开列表,会跑11次onBindViewHoler函数(page size为8),第一次移动到底部时onBindViewHoler也跑了11次,但第二次就只有8次了,最后的三个item没有跑onBindViewHoler来加载。 结论:RecyclerView自带的缓存机制导致这种问题,RecyclerView会预加载前后一定数量的item,这些item在显示时不会再次调用onBindViewHoler 对策:总之这是由于RecyclerView本身的机制导致

Android RecyclerView的滑动监听

笑着哭i 提交于 2019-12-20 01:30:59
RecyclerView提供了addOnScrollListener 做滑动监听里面提供了两个方法 onScrollStateChanged和 onScrolled 如果只做滑动监听 onScrolled就够用了 从onScrolled方法里面int position = linearLayoutManager.findFirstVisibleItemPosition(); 就能获取到滑动的item 了 //根据索引来获取对应的itemView View firstVisiableChildView = linearLayoutManager .findViewByPosition(position); //获取当前显示条目的高度 int itemHeight = firstVisiableChildView.getHeight(); //获取当前Recyclerview 偏移量 int flag = (position) * itemHeight - firstVisiableChildView.getTop(); flag 这样就获取到滑动的偏移量了,大部分需求都能完成 我这里用到的是类似一个淘宝的tab滑动显示效果 来源: CSDN 作者: 渣渣龙 链接: https://blog.csdn.net/Theprogramleaders/article/details

Android recyclerview 局部刷新问题

若如初见. 提交于 2019-12-20 01:22:11
recyclerview 局部刷新,一般用的是 notifyItemChanged(position); 这个刷新了整个item,但有时候,我只想刷新item里面的一部分,而且刷新整个item的时候,imageview可能会闪屏 这样,用到了另一个方法 notifyItemChanged(POSITION, "share"); 第一个参数不用解释,第二个参数为标识,如果传null的话,会刷新整个item,查源码会看到,notifyItemChanged(position) 其实 就是调用的notifyItemChanged(position,null) 对了 第二个参数,类型随意 接着 在adapter里面 重写 onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position, List payloads) 这个 payloads 只有一个数据,就是 上面说的notifyItemChanged的第二个参数,正好用来做标识判断刷新哪个。。 来源: CSDN 作者: 燕满天 链接: https://blog.csdn.net/yanmantian/article/details/103615971

浅谈Android RecyclerView

感情迁移 提交于 2019-12-19 11:51:30
Android RecyclerView 是Android5.0推出来的,导入support-v7包即可使用。 个人体验来说,RecyclerView绝对是一款功能强大的控件。 首先总结下RecyclerView的特点: 1.支持不同方向,不同排版模式,实现多种展现数据的形式,涵盖了ListView,GridView,瀑布流等数据表现的形式 2.内部实现了回收机制,无需我们考虑View的复用情况 3.取消了onItemClick等点击事件,需要自己手动去写 ------------------------------------------------------------------------------------ 那么让我们通过一些Demo来了解RecyclerView的基本使用 首先,要导入support-v7 包 import android.support.v7.widget.RecyclerView; RecyclerView和ListView的使用一样,都需要有对应的Adapter,列表项布局,数据源 1.先写主Activity布局 可以看到RecyclerView的标签 <android.support.v7.widget.RecyclerView> <LinearLayout xmlns:android="http://schemas.android.com

RecyclerView

时光毁灭记忆、已成空白 提交于 2019-12-19 07:26:10
关于布局 1.添加依赖 2.添加<android.support.v7.widget.RecyclerView></android.support.v7.widget.RecyclerView> 关于Activity 1.初始化RecyclerView 2.创建RecyclerView适配器 1)继承RecyclerView.Adapter<MyViewHolder>泛型为自定义内部类ViewHolder 2)创建内部类ViewHolder 继承于RecyclerView.ViewHolder 在这里自定义布局加载控件 class MyViewHolder extends RecyclerView.ViewHolder{ public final TextView tv; public MyViewHolder(View itemView) { super(itemView); tv = (TextView)itemView.findViewById(R.id.tv); } 3)构造方法中存入数据与上下文对象 4)重写三个方法 ①创建RecyclerView的布局并返回viewHolder LayoutInflater mLayoutInflater=LayoutInflater.from(mContent); View inflate = mLayoutInflater