recyclerview

RecyclerView - How highlight central visible item during scroll

匿名 (未验证) 提交于 2019-12-03 00:48:01
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 由 翻译 强力驱动 问题: I need a RecyclerView like this: It should does: show 7 items per time ( DONE ) center the RecyclerView on the central visible item ( DONE ) when I scroll to right/left, the central item will be "highlighted" (the button is selected > blue color) ( need HELP ) when I click on a button, it will be centered with a smooth scrool ( need HELP ) I used SnapHelper class to center the RecyclerView on the central items (I retrieve the central visible item getting the nearest child to the screen center) MY ADAPTER: public class

android ScrollView嵌套RecyclerView只显示一条数据的解决办法

匿名 (未验证) 提交于 2019-12-03 00:37:01
在RecyclerView外层套上一层RelativeLayout即可。 如果列表中有edittext 不能写 android :descendantFocusability= "blocksDescendants" <RelativeLayout android :layout_width= "match_parent" android :layout_height= "match_parent" > <android.support.v7.widget.RecyclerView android :id= "@+id/recyclerview_order_goods" android :layout_width= "match_parent" android :layout_height= "match_parent" android :background= "#F5F5F5" android :overScrollMode= "never" android :scrollbars= "none" /> </RelativeLayout> 文章来源: android ScrollView嵌套RecyclerView只显示一条数据的解决办法

RecyclerView嵌套实现购物车

匿名 (未验证) 提交于 2019-12-03 00:37:01
activity――main <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout </LinearLayout> </RelativeLayout> rv――item <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout <TextView </LinearLayout> </LinearLayout> shopcart――item <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout </LinearLayout> </LinearLayout> 文章来源: RecyclerView嵌套实现购物车

基于Android官方Paging Library的RecyclerView分页加载框架

匿名 (未验证) 提交于 2019-12-03 00:37:01
基于Android官方Paging Library的RecyclerView分页加载框架 我之前写了一篇RecyclerView分页加载机制的文章,是基于Android官方的AsyncListUtil实现的,详情见附录文章1。现在再介绍一种RecyclerView分页加载框架:Android Paging Library。 Android Paging Library是Android官方support-v7支持包中专门做的分页框架,详细文档见谷歌官方文档附录2页面。我写这篇文章时候Paging Library的版本是1.0.0-alpha3。 使用Android Paging Library首先需要在gradle添加引用: [plain] view plain copy print ? implementation 'android.arch.paging:runtime:1.0.0-alpha3' 下面我写示例代码做一个简单的演示: [java] view plain copy print ? package import import import import import import import import import import import import import import import import import import import

vlayout原理分析

匿名 (未验证) 提交于 2019-12-03 00:34:01
当我们使用RecylerView时,需要绑定一个Adapter和LayoutManager,而vlayout里定义了 VirtualLayoutAdapter (继承自Adapter)和 VirtualLayoutManager (继承自LayoutManager)来绑定到RecyclerView。 VirtualLayoutAdapter 它是一个抽象类,很简单: public abstract class VirtualLayoutAdapter < VH extends RecyclerView . ViewHolder > extends RecyclerView . Adapter < VH > { @NonNull protected VirtualLayoutManager mLayoutManager; public VirtualLayoutAdapter(@NonNull VirtualLayoutManager layoutManager) { this .mLayoutManager = layoutManager; } // 设置整个页面一系列的LayoutHelper public void setLayoutHelpers(List<LayoutHelper> helpers) { this .mLayoutManager

RecyclerView 的拖拽和长按变化Item的位置,设置左右滑动删除数据和滑动改变背景等

匿名 (未验证) 提交于 2019-12-03 00:27:02
项目地址:https://github.com/ChloeDimen/RecyclerviewDemo 点击打开链接 1:想要实现RecyclerView 的拖拽和长按变化Item的位置,设置左右滑动删除数据和滑动改变背景的关键字: ItemTouchHelper 关键代码: MyItemTouchHelperCallBack callback = new MyItemTouchHelperCallBack( adapter ) ; itemTouchHelper = new ItemTouchHelper(callback) ; itemTouchHelper .attachToRecyclerView( rl_data ) ; 2:主要是实现MyItemTouchHelperCallback继承ItemTouchHelper.callback public class MyItemTouchHelperCallBack extends ItemTouchHelper.Callback { private ItemTouchMoveListener mItemTouchMoveListener ; public MyItemTouchHelperCallBack (ItemTouchMoveListener itemTouchMoveListener) {

细谈RecyclerView:(三)模仿ViewPager滑动效果与SnapHelper源码分析

匿名 (未验证) 提交于 2019-12-03 00:27:02
如果我们正常使用RecyclerView的话,那我们实现的效果就应该和上面的一样:当我们进行滑动的时候,RecyclerView中的Item停止的位置是取决于你滑动时的速度(Fling),可能会出现的情况是最终我们停止的位置可能位于两个item之间,当然也有可能正好位于某个item的中间。 如果这个时候我们的产品经理提出最终停止的位置一定要在某个Item上,不能出现位于两个之间的情况;或者产品经理说滑动的时候我们要一个一个滑过去,不能一下滑好多个… 那这个时候我们怎么办呢? 我们先来看看效果。 效果:滑动停止后Item的中心会被附加到RecyclerView的中心,说的直白点就是滑动停止后会显示一个完整的Item。 效果:滑动时一个一个滑动,类似于ViewPager滑动效果。 SnapHelper 实现上面两种效果用到的类就是SnapHelper。 SnapHelper的作用是什么呢? Class intended to support snapping for a RecyclerView. SnapHelper tries to handle fling as well but for this to work properly, the RecyclerView.LayoutManager must implement the RecyclerView

RecyclerView和ViewPager内存管理的区别

匿名 (未验证) 提交于 2019-12-03 00:22:01
之所以想到写本文,是因为看到鸿洋微博的RecyclerView实现抖音效果的文章。里面讲了ViewPager实现会OOM,RecyclerView不会。 第一个get的点,RecyclerView打造成ViewPager,这个就不用多说了,SnapHelper封装了这一切 第二个get的点,为什么RecyclerView不会OOM呢? 这需要掌握RecyclerView一些浅显的原理。RecyclerView除了界面上显示的item,还有上下各2个供4个的预加载item。所以他内存中有 当前界面可见item数量+4 个数的item。他会在滑动的时候,不断bind新的数据。 ViewPager则是需要给他View的集合,你如果有10000个item,那内存中就必须有10000个item。 曾经我懵懂的时候问过Android老师,怎么才能只使用3个item去实现ViewPager? 这个问题挺白痴的,因为很简单就能实现。但是没想到老师说的答案令我震惊了,你没必要这么搞,他会自动替你管理,你移动到哪里就会有对应的item的销毁和创建。我说,假如我要写一个电子书,他有10000页,我肯定不能让他有10000页在内存中的对吗。他说,现在手机硬件都很好了,你做的这点优化微不足道。。。 这里就不写后续剧情了。我们固然可以用少量的item去实现ViewPager

使用RecyclerView实现抖音纵向滚动ViewPager效果

匿名 (未验证) 提交于 2019-12-03 00:22:01
重写LinearLayoutManager,在onAttachedToWindow方法中使用 PagerSnapHelper设置RecyclerView条目加载方式为每次滚动加载一页 class MyLinearLayoutManager : LinearLayoutManager { private lateinit var mPagerSnapHelper: PagerSnapHelper private var mOnViewPagerListener: OnViewPagerListener? = null private lateinit var mRecyclerView: RecyclerView private var mDrift: Int = 0 //位移,用来判断移动方向 constructor(context: Context) : this (context, OrientationHelper.VERTICAL) constructor(context: Context, orientation: Int) : this (context, orientation, false ) constructor(context: Context, orientation: Int, reverseLayout: Boolean) : super

RecyclerView添加和删除操作notifyDataSetChanged依旧会导致item混乱的解决办法

匿名 (未验证) 提交于 2019-12-03 00:22:01
记录一个自己犯的蠢问题 @Override public void onBindViewHolder(final ViewHolder holder, int position) { final int pos = position; if(!holder.add.hasOnClickListeners()){ holder.add.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { infoList.add(pos,new TeacherChangeGradeInfo()); Log.e("add POS:",pos+",size:"+infoList.size()); notifyItemInserted(pos);//通知演示插入动画 notifyItemRangeChanged(pos,infoList.size()-pos);//通知数据与界面重新绑定 } }); holder.delete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { infoList.remove(pos); Log.e("delete