Articles of android recyclerview

防止RecyclerView消耗触摸事件

问题 我试图模拟Google Play应用程序的确切行为。 目前,当您滚动浏览类似“热门游戏”的类别并触摸列表时,该单元格以及RecyclerView处理触摸事件,您可以告诉他们正在处理它,因为当您握住手指时出现波纹下来以及滚动停止。 或者,如果您在列表仍在移动时单击一个单元格,则会立即打开该内容。 默认行为是滚动在您移动时将手指放下时立即停止,然后消耗该触摸事件,这意味着细胞永远不会被告知该触摸。 当您的应用程序主要内容位于RecyclerView ,如果用户不断滚动然后单击一个单元格,则需要他们单击两次,因为通过停止滚动消耗了第一次单击,即使列表是几乎没动。 我到目前为止所做的一切 起初我以为在RecyclerView必须有某种标志,告诉它不要消耗触摸事件。 我查看了Android源代码并通过Android文档路由无济于事。 然后我尝试使用onInterceptTouchEvent捕获触摸事件并手动告诉我的视图它被触摸; @Override public boolean onInterceptTouchEvent(MotionEvent event) { View myCell = recyclerView.findChildViewUnder(event.getX(), event.getY()); myCell.dispatchTouchEvent(event); return super.onInterceptTouchEvent(event); } 在这里, dispatchTouchEvent似乎没有做任何事情,即使我得到的视图有我在适配器中设置的相应标签。 我试过用我的编码机枪在各个角度拍摄这个问题; 使用requestDisallowInterceptTouchEvent ,手动调用onTouch并覆盖RecyclerView及更高版本的所有侦听器。 似乎没有什么工作。 我敢肯定必须有一个优雅的解决方案,我已经在精神错乱的道路上掠过一个重要的细节? 特别是因为谷歌自己的应用程序以这种方式运行。 请帮忙! :) 谢谢。 解决方案 感谢Jagoan Neon已find解决方案。 我最终将他的答案包含在自定义的RecyclerView以方便使用。 public class MultiClickRecyclerView extends RecyclerView { public MultiClickRecyclerView(Context context) { super(context); } public […]

如何使用ButterKnife OnItemClick与RecyclerView?

由于onItemClick在RecyclerView中不再存在, ButterKnife是否仍然可以使用@onItemClick或@onClick注释处理其项目点击? 如果不是这样,任何使用它的工作?

RecyclerView网格具有不同的项目大小

我需要创建一个水平滚动网格,可以分配不同宽度和不同高度的项目。 StaggeredGridLayoutManager可以处理不同的宽度,但它不会让我有不同高度的项目。 是否有任何LayoutManager实现可以做我需要的?

突然在CoordinatorLayout Android内的ViewPager Fragment中使用NestedScrollView滚动

我在CoordinatorLayout ViewPager的主要滚动问题。 当前场景: app:appbarScrollingViewBehaviour在ViewPager上ViewPager 。 ViewPager片段将NestedScrollView作为其根父级。 片段布局包含Horizo​​ntal RecyclerView 。 当我通过触摸RecyclerView向上滚动时,应用栏不会滚动,而只会发生嵌套滚动。 当我通过触摸视图的其余部分滚动时, CoordinatorLayout滚动。 6)嵌套滚动也在中途停止并切断内容。 我已经尝试过了: 将ViewPager放在NestedScrollView并将app:appbarScrollingViewBehaviour属性设置为NestedScrollView 。 这完全切断了片段内容,因为RecyclerView无法确定其高度。 在RecyclerView上设置setAutoMeasureEnabled(true) ,仍然无法修复高度。 还有很多其他方法。 请帮助解决这个问题。 在上传的.gif文件中可以看到当前行为。 我还发布了活动布局和片段布局以及RecyclerView行布局的代码。 谢谢 activity.xml: pager_fragment.xml: <!– –>

Android RecyclerView LayoutManagerexception

嗨,我遇到了新的Android Lollipop RecyclerView 它会因以下exception而崩溃 : Attempt to invoke virtual method ‘void android.support.v7.widget.RecyclerView$LayoutManager.onMeasure(android.support.v7.widget.RecyclerView$Recycler, android.support.v7.widget.RecyclerView$State, int, int)’ on a null object reference 可以在此处find完整堆栈跟踪 用于启动RecyclerView的代码与教程大致相同,但由于某种原因,这仍然是抱怨。 任何帮助将不胜感激。 可以在以下位置访问代码: gist here和layout: this gist views或objects都不为null

RecyclerView重新计算WRAP_CONTENT

对于版本23.2,我们现在可以将WRAP_CONTENT用于recyclerView高度,这很棒。 我这样做,但是我想在将项目添加(或删除)到适配器后重新计算高度(从而增加或减少高度)。 我的特定RecyclerView从1项开始,然后在用户选择时添加项。 因此,我需要使用RecyclerView布局来增加高度,直到某一点。 理想情况下,当列表增加或减少时,平滑animation会发生这种情况。 在WRAP_CONTENT后我们如何才能使它成为WRAP_CONTENT ? 尝试: recyclerview.requestLayout(); recyclerview.invalidate();

如何使用RxJava处理回收站视图的项目点击

我有兴趣了解回应物品点击回收者视图的最佳方法是什么。 通常我会向ViewHolder添加一个onclick()侦听器,并通过接口将结果传回活动/片段。 我想在onBindViewHolder中添加一个Observable,但我不想为每个项目绑定创建一个新的Observable。

在刷过的RecyclerView项目下显示自定义视图

首先,我看到了这个问题: 使用Android的RecyclerView时,在刷卡行下添加带有文本/图标的彩色背景 但是,即使标题声明“带有文本/图标”,答案也仅涵盖使用Canvas对象绘制矩形。 现在我已经绘制了一个绿色矩形; 但是我希望通过添加“完成”按钮来更明显地发生什么,就像在下面的屏幕截图中一样。 我创建了一个自定义视图: public class ChoosePlanView extends LinearLayout{ public ChoosePlanView(Context context) { super(context); init(); } public ChoosePlanView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public ChoosePlanView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } private void init(){ View v = inflate(getContext(), R.layout.choose_plan_view, null); addView(v); } } 布局非常简单,包括绿色背景和图标: 我尝试重写方法OnChildDraw […]

RecyclerView.Adapter的onCreateViewHolder被调用两次或更多次,多次

我目前正在开发一个使用RecyclerView的应用程序。 在查看LogCat时,我注意到onCreateViewHolder在实例化后被调用了两次。 09-22 05:22:55.209 V/Adapter﹕ Construct 09-22 05:22:55.213 V/Adapter﹕ onCreateViewHolder 09-22 05:22:55.224 V/Adapter﹕ onBindViewHolder 09-22 05:22:55.240 V/Adapter﹕ onCreateViewHolder 09-22 05:22:55.247 V/Adapter﹕ onBindViewHolder 另外onBindViewHolder被调用了两次虽然我知道只要项目被回收就会被调用。 但我认为onCreateViewHolder只需调用一次即可。 这是exception行为吗? 如果是这样,怎么解决?

RecyclerView notifyDataSetChanged滚动到顶部位置

在notifyDataSetChanged上调用notifyDataSetChanged ,它不会保留滚动位置并滚动到顶部,是否有任何解决方案可以保留它的滚动位置?