Recyclerview现在有3个州。
SCROLL_STATE_IDLE, SCROLL_STATE_DRAGGING, SCROLL_STATE_SETTLING
issue为此提出了一个包括一个投掷状态。我无法确定是否有任何相关的事情。
有没有办法区分Recyclerview中的Drag和Fling。
编辑:对此类功能的要求: 当用户徘徊时,我希望能够在回收者视图中暂停加载图像(所有图像都是网址请求)并在他到达感兴趣的项目后恢复,从而确保他当前正在查看的图像在其他图像之前加载。 / p>
答案 0 :(得分:7)
SCROLL_STATE_FLING
:不再是RecyclerView
的一部分,因为documentation here中未提及
关于您的要求:
RecyclerView位于android.view.ViewGroup
内,根据其源代码extends ViewGroup
documentation here。
RecyclerView中的滚动在RecyclerView和LinearLayoutManager之间分开。有两种情况需要处理:
fling()
实施而不是flinging
,smoothscroll
LinearLayoutManager
到位置来解决此问题。onTouchEvent
方法来执行此操作。请参阅此处了解详情Snappy scrolling in RecyclerView
值得一提的ViewPager
一些RecyclerView
提示是其中的一个孩子:
考虑修改缓存的页面数。当您只有3或4页时,这一点尤为重要。默认设置将在当前页面的两侧存储1页。在您有3个页面的情况下,滑动到中间页面意味着将缓存所有页面。然后滑动到第一页或最后一页将删除其中一个页面的内存,当您再次向后滑动时,需要重新创建并重新添加这些页面。通过设置setOffscreenPageLimit(2)
,您将允许所有页面始终保留在内存中。这是性能和内存考虑因素之间的权衡,因此最好是监听低内存警告并准备好在必要时删除边缘页面。
如果您尝试在ViewPager中替换视图,仅更改适配器后面的数据集并调用notifyDataSetChanged()
是不够的。您还需要确保已正确实施getItemPosition(Object object)
并为已更改的项目返回POSITION_NONE
并返回POSITION_UNCHANGED
或未更改项目的实际位置。
添加的另一个API是setPageMargin()
和setPageMarginDrawable()
,可让您轻松分隔您的网页。
请参阅此处了解详情Horizontal View Swiping with ViewPager, Updated
拖动和投掷之间的区别
对于拖动功能您可以使用某些RecyclerView's
个随播广告类:
ItemTouchHelper,这是一个实用程序类,用于添加滑动以关闭和拖动&放弃对RecyclerView的支持。
其ItemTouchHelper.Callback,这是ItemTouchHelper与您的应用程序之间的合约
对于 fling ,您可以看到
答案 1 :(得分:6)
我使用GUI
的组合来执行此操作:这是我的代码:
key='123' and label='123 test' then my condition fails
这对我来说同样适用于当用户停留在感兴趣的项目
时恢复答案 2 :(得分:1)
您的问题可能以不同的方式解决。您可以尝试将请求推迟几百毫秒(确切的数字需要调整)。如果列表项在这些毫秒内滚动屏幕外,您可以在发送之前取消该请求。我们的想法是,如果您投掷,视图将在屏幕外滚动,以便在发送之前始终取消请求。如果他们没有投掷,那么每个请求额外的毫秒数希望对经验来说并不算太糟糕。