Articles of android recyclerview

当键盘出现时,Android工具栏会向上移动

我正在创建一个基于聊天的UI屏幕,其中我有聊天消息的工具栏和recyclelerview,并回复msg布局。 每当edittext获得焦点时它会向上移动工具栏。 相反,我想调整recyclerview的大小。 一些stackoverflow答案建议在工具栏下方放置一个空的滚动视图 ,但它不起作用。 我将windowSoftInputMode设置为清单文件中的stateVisible|adjustPan 。

“android:textIsSelectable =”true“不适用于RecyclerView中的TextView

我知道在xml中为TextView设置android:textIsSelectable=”true”将显示本机文本选择popup窗口,我一直在我的应用程序中使用它。 但是当我尝试在附加到RecyclerView的视图中设置相同的属性时,我发现它不再起作用了。 每当我尝试选择文本时,会出现以下日志 – TextView: TextView does not support text selection. Action mode cancelled. 我不知道为什么? 为什么它适用于其他屏幕而不适用于RecyclerView 。 我看了很多post – 带有android的TextView:textIsSelectable =“true”在listview中不起作用 textview textIsSelectable =“true”在Listview中不起作用 对于ListView中的TextView,android:textIsSelectable =“true”不起作用 但后来我遇到了这个post – Android:“TextView不支持文本选择。操作模式已取消” @hungkk的回复为我工作。 他的解决方案建议将TextView宽度从match_parent更改为wrap_content 。 我知道我可以做到这一点,但我的问题是如何解决这个问题,因为它看起来很奇怪。 而且,如果我想将宽度保持为match_parent ,那么解决方案是什么。 欢迎任何意见。

Espresso,当NestedScrollView或RecyclerView在CoordinatorLayout中时滚动不起作用

看起来CoordinatorLayout会破坏Espresso操作的行为,例如scrollTo()或RecyclerViewActions.scrollToPosition() 。 NestedScrollView问题 对于像这样的布局: … … 如果我尝试使用ViewActions.scrollTo()滚动到NestedScrollView内的任何视图,我发现的第一个问题是我得到一个PerformException 。 这是因为此操作仅支持ScrollView而NestedScrollView不会扩展它。 这里解释了这个问题的解决方法,基本上我们可以在scrollTo()复制代码并更改约束以支持NestedScrollView 。 如果NestedScrollView不在CoordinatorLayout但是只要将它放在CoordinatorLayout ,滚动操作就会失败,这似乎有效。 RecyclerView问题 对于相同的布局,如果我用RecyclerView替换NestedScrollView ,则滚动也会出现问题。 在这种情况下,我使用RecyclerViewAction.scrollToPosition(position) 。 与NestedScrollView不同,在这里我可以看到一些滚动发生。 但是,它看起来像滚动到错误的位置。 例如,如果我滚动到最后一个位置,它会显示倒数第二个但不是最后一个。 当我将RecyclerView移出CoordinatorLayout ,滚动工作正常。 目前,由于此问题,我们无法为使用CoordinatorLayout的屏幕编写任何Espresso测试。 任何遇到相同问题或知道解决方法的人?

RecyclerView.Adapter.notifyItemChanged()永远不会将有效负载传递给onBindViewHolder()

我正在尝试更新RecyclerView的ViewHolder而不重新绑定整个事物。 根据文档,我应该通过调用RecyclerView.Adapter.notifyItemChanged(int position, Object payload)来做到这一点,其中payload是一个任意对象,将被传递给RecyclerView.Adapter.onBindViewHolder(VH holder, int position, List payloads) ,我将能够更新ViewHolder。 但是当我尝试这个时, onBindViewHolder总是会收到一个空列表。 在这两个调用之间,内部有效负载列表被清除。 在RecyclerView的源代码中设置断点后,会发生这种情况,因为重新布局,最终调用RecyclerView.ViewHolder.clearPayload() 有没有其他人设法让这个工作? 这是支持库中的错误还是我在触发这两个函数之间的重新布局时所做的事情? 这是清除有效负载时的堆栈跟踪: ” main@831692616832″ prio=5 runnable java.lang.Thread.State: RUNNABLE at android.support.v7.widget.RecyclerView$ViewHolder.clearPayload(RecyclerView.java:8524) at android.support.v7.widget.RecyclerView$ViewHolder.resetInternal(RecyclerView.java:8553) at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4544) at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4461) at android.support.v7.widget.LayoutState.next(LayoutState.java:86) at android.support.v7.widget.StaggeredGridLayoutManager.fill(StaggeredGridLayoutManager.java:1423) at android.support.v7.widget.StaggeredGridLayoutManager.onLayoutChildren(StaggeredGridLayoutManager.java:610) at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2847) at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3145) at android.view.View.layout(View.java:14289) at android.view.ViewGroup.layout(ViewGroup.java:4562) at android.support.v4.widget.SwipeRefreshLayout.onLayout(SwipeRefreshLayout.java:581) at android.view.View.layout(View.java:14289) at android.view.ViewGroup.layout(ViewGroup.java:4562) at android.widget.FrameLayout.onLayout(FrameLayout.java:448) at […]

Android – 滚动后无法单击RecyclerView中的项目

我刚刚升级到API 26并支持库26.0.2。 但我发现滚动后我的RecyclerView项目无法点击。 如果你等一下,它会起作用。 但是如果你立即点击该项目,它就不会。 即使RecyclerView根本没有滚动(例如滚动到顶部)。 当我降级为支持库25.4.0时,一切都会好起来的。 关键点在于我的RecyclerView位于CoordinatorLayout ,并且在SCROLL_FLAG_SCROLL Toolbar上有一个SCROLL_FLAG_SCROLL标志。 如果我不使用此标志,则此问题将消失。 所以我认为这是支持库26的隐藏行为变化。 我试图将focusable=”false”添加到CoordinatorLayout但仍然没有运气。 有没有办法禁用这种行为? 因为点击两次以触发点击事件真的很烦人。 编辑 我认为问题是RecyclerView的scrollState 。 当它停止滚动时,它不会立即更改为SCROLL_STATE_IDLE 。 查看RecyclerView的源代码,我发现有一个ViewFlinger控制滚动状态。 当我向下滚动到顶部时,它不会立即调用setScrollState(SCROLL_STATE_IDLE) ,而是等待一段时间来触发此方法。 我越快,我需要等待的时间越多。 就像RecyclerView仍然在后台滚动一样。 因为scroller.isFinished()在RecyclerView触及顶部后停止滚动后才会返回true。 当它在CoordinatorLayout时,它可能是RecyclerView的一个错误。

错误:属性“主题”已定义

我正在使用Android studio来构建应用程序。 我正在使用以下依赖项: 播放服务: compile ‘com.google.android.gms:play-services:5.2.08’ app combat v7: compile ‘com.android.support:appcompat-v7:21.0.0’ 支持Cardview: compile ‘com.android.support:cardview-v7:21.0.0’ 支持Recycler视图: compile ‘com.android.support:recyclerview-v7:21.0.0’ 我在构建应用程序时遇到以下错误: app/build/intermediates/exploded-aar/com.google.android.gms/play-services/5.2.08/res/values/wallet_attrs.xml Error:Attribute “theme” has already been defined 代码Styles.xml 代码wallet_attrs.xml

如何滚动到scrollview内的recyclerview中的特定位置?

我已经搜索了很多关于我的查询,但没有一个是有用的。 我有一个recyclelerview和滚动视图中的一些静态数据,它位于root parentlayout中,如下所示。 我已经设定 – scrollview.scrollto(0,0); 因为每当我打开活动时它会跳转到recyclerview firstitem并且它会跳过recyclerview上方的静态数据。 recyclerview.setNestedScrollingEnabled(false); recyclerview.setfocusable(false); 对于smoothscroll。 问题是 – layoutmanager.scrollToPositionWithOffset(pos,0); 它不起作用。 在将适配器设置为recyclerview后,我已设置了aboveline。 也尝试使用NestedScrollView但是徒劳无功。 虽然我用过 layoutmanager.scrollToPosition(pos); 对于那些跳过代码的人,我已将match_parent设置为ScrollView,并将fillviewport设置为true。 这是我的布局。 include layout=”@layout/activity_coupons” android:visibility=”gone” />

物品上的RecyclerViewanimation单击

我正在尝试实现我自己的recyclelerviewanimation – 我想在不使用任何外部库的情况下实现这一点。 这是理论animation应该是什么样子。 用户单击列表上的项目并发生animation,从而打开另一个视图。 在具有最少代码的高级别,可能只是伪代码,为了创建这样的animation,该过程将是什么? 另外我想要注意的是,如果用户点击相同的项目或其他项目,animation也应该能够反向完成 我对RecyclerView类并不熟悉,并希望了解更多有关它以及与之相关的任何animation。

Android TV RecyclerView重点互动

我目前正在使用带有GridLayoutManager的常规RecyclerView ,其中不同的spanCount取决于Android TV应用的viewType 。 一切都很好,但我有两个问题: 如果长按向下dpad在项目之间快速滚动,有时焦点将丢失到不属于RecyclerView的子视图。 如何告诉RecyclerView将当前聚焦视图保持在网格中心? 似乎列出的问题是通过使用LeanBack库中的VerticalGridView修复的,但它使用的LayoutManger是内部的,不支持spanCount 。

滚动时animationRecyclerView

有什么方法可以在滚动时为RecyclerView的元素设置animation效果吗? 我看了一下DefaultItemAnimator和RecyclerView.ItemAnimator ,但是这些animation似乎只在数据集发生变化时被调用,如果我错了,请纠正我。 当它被调用时,我对RecyclerView.ItemAnimator.animateMove()有点困惑? 我在该课程中加入了一些断点,但没有一个断点停止我的应用程序。 但是回到我的问题,我如何为RecyclerView设置animation? 我希望某些元素具有另一个不透明度,取决于一些自定义规则。 我做了一些更多的研究似乎animation移动正是我正在寻找的东西。 从dispatchLayout()调用这些方法。 这是该方法的javadoc: layoutChildren()周围的包装器,用于处理由布局引起的animation更改。 animation假设有五种不同的物品在起作用: PERSISTENT:在布局之前和之后可以看到项目 删除:项目在布局之前可见,并由应用程序删除 添加:项目在布局之前不存在并由应用程序添加 消失:项目存在于数据集之前/之后,但在布局过程中从可见变为不可见(它们被移出屏幕作为其他变化的副作用) 出现:项目存在于数据集之前/之后,但在布局过程中从不可见变为可见(它们作为其他变更的副作用在屏幕上移动) 总体方法计算布局之前/之后存在的项目,并推断出每个项目的上述五种状态之一。 然后相应地设置animation: 移动了PERSISTENT视图({@link ItemAnimator#animateMove(ViewHolder,int,int,int,int)})删除了REMOVED视图({@link ItemAnimator #animateRemove(ViewHolder)}) 添加了添加的视图({@link ItemAnimator#animateAdd(ViewHolder)}) DISAPPEARING视图移出屏幕 外观视图在屏幕上移动 到目前为止,我正在寻找PERSISTENT,DISAPPEARING和APPEARING,但这些方法从未被调用过,因为这里有这一行: boolean animateChangesSimple = mItemAnimator != null && mItemsAddedOrRemoved && !mItemsChanged; mItemsAddedOrRemoved总是假的,所以没有达到任何回调。 知道如何正确设置设置标志吗?