public class RecyclerView
extends ViewGroup
implements ScrollingView, NestedScrollingChild
java.lang.Object | |||
↳ | android.view.View | ||
↳ | android.view.ViewGroup | ||
↳ | android.support.v7.widget.RecyclerView |
Known Direct Subclasses |
为大型数据集提供有限窗口的灵活视图。
RecyclerView.Adapter
responsible for providing views that represent items in a data set.getChildAt(int)
. Contrast with Position.RecyclerView在RecyclerView.Adapter
和RecyclerView.LayoutManager
之间引入了一个额外的抽象级别,以便能够在布局计算过程中检测批次中的数据集更改。 这可以让LayoutManager跟踪适配器更改以计算动画。 它还有助于提高性能,因为所有视图绑定同时发生,并且避免了不必要的绑定。
为此,RecyclerView中有两种类型的 position
相关方法:
除了调度 adapter.notify*
事件和计算更新的布局之间的时间之外,这两个位置是相同的。
方法,返回或接收*LayoutPosition*
的最新布局计算(例如使用位置getLayoutPosition()
, findViewHolderForLayoutPosition(int)
)。 这些职位包括所有更改,直到最后的布局计算。 您可以依靠这些职位与当前在屏幕上看到的用户保持一致。 例如,如果屏幕上有一个项目列表,并且用户要求第5 个元素,则应该使用这些方法,因为它们将与用户看到的内容匹配。
另一组位置相关方法的形式为*AdapterPosition*
。 (如getAdapterPosition()
, findViewHolderForAdapterPosition(int)
),当你需要跟上时代的适配器的位置,即使他们可能没有被反映到尚未布局的工作,你应该使用这些方法。 例如,如果要在ViewHolder单击中访问适配器中的项目,则应使用getAdapterPosition()
。 请注意,如果已调用notifyDataSetChanged()
并且尚未计算新布局,则这些方法可能无法计算适配器位置。 出于这个原因,您应该仔细处理来自这些方法的NO_POSITION
或null
结果。
编写 RecyclerView.LayoutManager
您几乎总是要使用布局位置,而编写 RecyclerView.Adapter
,您可能需要使用适配器位置。
Nested classes |
|
---|---|
class |
RecyclerView.Adapter<VH extends RecyclerView.ViewHolder> 适配器的基类 适配器提供从应用程序特定数据集到 |
class |
RecyclerView.AdapterDataObserver 观察者基类用于观察对 |
interface |
RecyclerView.ChildDrawingOrderCallback 一个回调界面,可用于更改RecyclerView子项的绘制顺序。 |
class |
RecyclerView.ItemAnimator 该类定义了在对适配器进行更改时发生在项目上的动画。 |
class |
RecyclerView.ItemDecoration ItemDecoration允许应用程序从适配器的数据集中为特定的项目视图添加特殊的图形和布局偏移量。 |
class |
RecyclerView.LayoutManager |
class |
RecyclerView.LayoutParams |
interface |
RecyclerView.OnChildAttachStateChangeListener 一个Listener接口,可以连接到RecylcerView以在ViewHolder连接到RecyclerView或从RecyclerView分离时得到通知。 |
interface |
RecyclerView.OnItemTouchListener OnItemTouchListener允许应用程序在RecyclerView自身的滚动行为被视为这些触摸事件之前,在RecyclerView的视图层次结构级别拦截正在进行的触摸事件。 |
class |
RecyclerView.OnScrollListener 当RecyclerView上发生滚动事件时,可以将OnScrollListener添加到RecyclerView中以接收消息。 |
class |
RecyclerView.RecycledViewPool RecycledViewPool可让您在多个RecyclerView之间共享视图。 |
class |
RecyclerView.Recycler 回收站负责管理报废或分离的物料视图以供重复使用。 |
interface |
RecyclerView.RecyclerListener RecyclerListener可以设置在RecyclerView上,以便在视图回收时接收消息。 |
class |
RecyclerView.SimpleOnItemTouchListener |
class |
RecyclerView.SmoothScroller
用于平滑滚动的基类。 |
class |
RecyclerView.State
包含有关当前RecyclerView状态的有用信息,例如目标滚动位置或视图焦点。 |
class |
RecyclerView.ViewCacheExtension ViewCacheExtension是一个辅助类,用于提供可由开发人员控制的额外视图缓存层。 |
class |
RecyclerView.ViewHolder ViewHolder描述了一个项目视图和关于它在RecyclerView中的位置的元数据。 |
XML attributes |
|
---|---|
android.support.v7.recyclerview:layoutManager |
Class name of the Layout Manager to be used. |
Inherited XML attributes |
|
---|---|
From class android.view.ViewGroup
|
|
From class android.view.View
|
Constants |
|
---|---|
int |
HORIZONTAL |
int |
INVALID_TYPE |
long |
NO_ID |
int |
NO_POSITION |
int |
SCROLL_STATE_DRAGGING RecyclerView目前正在被外部输入如用户触摸输入拖动。 |
int |
SCROLL_STATE_IDLE RecyclerView目前不在滚动。 |
int |
SCROLL_STATE_SETTLING RecyclerView目前正在动画到最终位置,而不受外界控制。 |
int |
TOUCH_SLOP_DEFAULT 常量用于 |
int |
TOUCH_SLOP_PAGING 常量用于 |
int |
VERTICAL |
Inherited constants |
---|
From class android.view.ViewGroup
|
From class android.view.View
|
Inherited fields |
---|
From class android.view.View
|
Public constructors |
|
---|---|
RecyclerView(Context context) |
|
RecyclerView(Context context, AttributeSet attrs) |
|
RecyclerView(Context context, AttributeSet attrs, int defStyle) |
Public methods |
|
---|---|
void |
addFocusables(ArrayList<View> views, int direction, int focusableMode) 将视图后代的任何可聚焦视图添加到视图中(可能包括该视图,如果它本身是可聚焦的话)。 |
void |
addItemDecoration(RecyclerView.ItemDecoration decor) 添加一个 |
void |
addItemDecoration(RecyclerView.ItemDecoration decor, int index) 添加一个 |
void |
addOnChildAttachStateChangeListener(RecyclerView.OnChildAttachStateChangeListener listener) 注册一个监听器,当子视图连接到RecyclerView或从RecyclerView分离时,将会收到通知。 |
void |
addOnItemTouchListener(RecyclerView.OnItemTouchListener listener) 添加 |
void |
addOnScrollListener(RecyclerView.OnScrollListener listener) 添加一个侦听器,将会通知任何滚动状态或位置的变化。 |
void |
clearOnChildAttachStateChangeListeners() 删除通过 |
void |
clearOnScrollListeners() 移除已通知滚动状态或位置发生任何更改的所有辅助侦听器。 |
int |
computeHorizontalScrollExtent() 计算水平滚动条拇指在水平范围内的水平范围。 |
int |
computeHorizontalScrollOffset() 计算水平滚动条拇指在水平范围内的水平偏移量。 |
int |
computeHorizontalScrollRange() 计算水平滚动条代表的水平范围。 |
int |
computeVerticalScrollExtent() 计算垂直滚动条拇指在垂直范围内的垂直范围。 |
int |
computeVerticalScrollOffset() 计算垂直滚动条拇指在垂直范围内的垂直偏移量。 |
int |
computeVerticalScrollRange() 计算垂直滚动条代表的垂直范围。 |
boolean |
dispatchNestedFling(float velocityX, float velocityY, boolean consumed) 向嵌套滚动父级派发一个投掷。 |
boolean |
dispatchNestedPreFling(float velocityX, float velocityY) 在此视图处理它之前,将嵌套分派给嵌套的滚动父级。 |
boolean |
dispatchNestedPreScroll(int dx, int dy, int[] consumed, int[] offsetInWindow) 在该视图消耗其任何部分之前,调度正在进行的嵌套滚动的一个步骤。 |
boolean |
dispatchNestedScroll(int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, int[] offsetInWindow) 发送正在进行的嵌套滚动的一个步骤。 |
void |
draw(Canvas c) 手动将此视图(及其所有子项)呈现给定的Canvas。 |
boolean |
drawChild(Canvas canvas, View child, long drawingTime) 绘制这个视图组的一个孩子。 |
View |
findChildViewUnder(float x, float y) 找到给定点下的最顶层视图。 |
View |
findContainingItemView(View view) 遍历给定视图的祖先,并返回包含它的项目视图,也是RecyclerView的直接子视图。 |
RecyclerView.ViewHolder |
findContainingViewHolder(View view) 返回包含给定视图的ViewHolder。 |
RecyclerView.ViewHolder |
findViewHolderForAdapterPosition(int position) 返回数据集给定位置的项目的ViewHolder。 |
RecyclerView.ViewHolder |
findViewHolderForItemId(long id) 返回具有给定ID的项目的ViewHolder。 |
RecyclerView.ViewHolder |
findViewHolderForLayoutPosition(int position) 返回数据集中给定位置的项目的ViewHolder,从最新的布局阶段开始。 |
RecyclerView.ViewHolder |
findViewHolderForPosition(int position) 此方法已弃用。 使用 |
boolean |
fling(int velocityX, int velocityY) 以每秒像素为单位,以每个轴的初始速度开始标准投掷。 |
View |
focusSearch(View focused, int direction) 由于RecyclerView是一个包含虚拟子项(包含在适配器中但在用户界面中不可见的项目)的ViewGroup集合,因此它采用了与其他ViewGroup不同的更加涉及的焦点搜索策略。 |
ViewGroup.LayoutParams |
generateLayoutParams(AttributeSet attrs) 根据提供的属性集返回一组新的布局参数。 |
Adapter |
getAdapter() 检索先前设置的适配器;如果未设置适配器,则返回null。 |
int |
getBaseline() 将RecyclerView文本基线的偏移量从其顶部边界返回。 |
int |
getChildAdapterPosition(View child) 返回给定子视图对应的适配器位置。 |
long |
getChildItemId(View child) 返回给定子视图对应的稳定项目标识。 |
int |
getChildLayoutPosition(View child) 返回给定子视图的适配器位置以及最近完成的布局传递。 |
int |
getChildPosition(View child) 此方法已弃用。 请使用 |
RecyclerView.ViewHolder |
getChildViewHolder(View child) |
RecyclerViewAccessibilityDelegate |
getCompatAccessibilityDelegate() 返回RecyclerView使用的可访问性委托兼容性实现。 |
RecyclerView.ItemAnimator |
getItemAnimator() 获取此RecyclerView的当前ItemAnimator。 |
RecyclerView.LayoutManager |
getLayoutManager() 返回目前负责此RecyclerView布局策略的 |
int |
getMaxFlingVelocity() 返回此RecyclerView使用的最大投掷速度。 |
int |
getMinFlingVelocity() 返回启动投掷的最低速度。 |
boolean |
getPreserveFocusAfterLayout() 如果RecyclerView应该尝试保留当前聚焦的Adapter Item的焦点,即使在布局计算期间替换表示Item的View也会返回true。 |
RecyclerView.RecycledViewPool |
getRecycledViewPool() 检索这个RecyclerView的 |
int |
getScrollState() 返回RecyclerView的当前滚动状态。 |
boolean |
hasFixedSize() |
boolean |
hasNestedScrollingParent() 如果此视图具有嵌套滚动父级,则返回true。 |
boolean |
hasPendingAdapterUpdates() 返回是否有尚未应用于布局的待定适配器更新。 |
void |
invalidateItemDecorations() 使所有ItemDecorations无效。 |
boolean |
isAnimating() 如果RecyclerView当前正在运行一些动画,则返回true。 |
boolean |
isAttachedToWindow() 如果RecyclerView附加到窗口,则返回true。 |
boolean |
isComputingLayout() 返回RecyclerView是否正在计算布局。 |
boolean |
isLayoutFrozen() 如果布局和滚动被冻结,则返回true。 |
boolean |
isNestedScrollingEnabled() 如果对此视图启用嵌套滚动,则返回true。 |
void |
offsetChildrenHorizontal(int dx) 将所有子视图的边界偏移 |
void |
offsetChildrenVertical(int dy) 将所有子视图的边界偏移 |
void |
onChildAttachedToWindow(View child) 在项目视图附加到此RecyclerView时调用。 |
void |
onChildDetachedFromWindow(View child) 在从此RecyclerView分离项目视图时调用。 |
void |
onDraw(Canvas c) 实施这个来做你的绘画。 |
boolean |
onGenericMotionEvent(MotionEvent event) 实现此方法来处理通用运动事件。 |
boolean |
onInterceptTouchEvent(MotionEvent e) 实施此方法来拦截所有触摸屏幕动作事件。 |
void |
onScrollStateChanged(int state) 当此RecyclerView的滚动状态改变时调用。 |
void |
onScrolled(int dx, int dy) 当此RecyclerView的滚动位置改变时调用。 |
boolean |
onTouchEvent(MotionEvent e) 实现此方法来处理触摸屏幕动作事件。 |
void |
removeItemDecoration(RecyclerView.ItemDecoration decor) 从此RecyclerView中删除 |
void |
removeOnChildAttachStateChangeListener(RecyclerView.OnChildAttachStateChangeListener listener) 从附加子状态侦听器列表中删除提供的侦听器。 |
void |
removeOnItemTouchListener(RecyclerView.OnItemTouchListener listener) |
void |
removeOnScrollListener(RecyclerView.OnScrollListener listener) 移除已通知滚动状态或位置发生任何更改的侦听器。 |
void |
requestChildFocus(View child, View focused) 当这个父母的孩子需要关注时调用 |
boolean |
requestChildRectangleOnScreen(View child, Rect rect, boolean immediate) 当该组的小孩想要将特定矩形定位到屏幕上时调用。 |
void |
requestDisallowInterceptTouchEvent(boolean disallowIntercept) 当孩子不希望这个父母及其祖先用 |
void |
requestLayout() 当事情发生变化时调用它,这已经使这个视图的布局无效。 |
void |
scrollBy(int x, int y) 移动视图的滚动位置。 |
void |
scrollTo(int x, int y) 设置视图的滚动位置。 |
void |
scrollToPosition(int position) 便捷方法滚动到某个位置。 |
void |
sendAccessibilityEventUnchecked(AccessibilityEvent event) 此方法的行为与 |
void |
setAccessibilityDelegateCompat(RecyclerViewAccessibilityDelegate accessibilityDelegate) 设置RecyclerView使用的可访问性委托兼容性实现。 |
void |
setAdapter(Adapter adapter) 设置新的适配器以按需提供子视图。 |
void |
setChildDrawingOrderCallback(RecyclerView.ChildDrawingOrderCallback childDrawingOrderCallback) 设置用于绘制儿童的 |
void |
setClipToPadding(boolean clipToPadding) 设置此ViewGroup是否将其子对象填充到其填充中,并将存在填充的任何EdgeEffect调整大小(但不剪切)到填充区域。 |
void |
setHasFixedSize(boolean hasFixedSize) 如果RecyclerView可以预先知道RecyclerView的大小不受适配器内容的影响,它可以执行多次优化。 |
void |
setItemAnimator(RecyclerView.ItemAnimator animator) 设置将处理动画的 |
void |
setItemViewCacheSize(int size) 在将它们添加到可能共享的 |
void |
setLayoutFrozen(boolean frozen) 启用或禁用布局和滚动。 |
void |
setLayoutManager(RecyclerView.LayoutManager layout) 设置该RecyclerView将使用的 |
void |
setNestedScrollingEnabled(boolean enabled) 启用或禁用此视图的嵌套滚动。 |
void |
setOnScrollListener(RecyclerView.OnScrollListener listener) 此方法已弃用。 使用 |
void |
setPreserveFocusAfterLayout(boolean preserveFocusAfterLayout) 设置RecyclerView是否应该尝试在布局计算之后保留相同的项目。 |
void |
setRecycledViewPool(RecyclerView.RecycledViewPool pool) 回收视图池允许多个RecyclerView共享一个公共的废料视图池。 |
void |
setRecyclerListener(RecyclerView.RecyclerListener listener) 注册一个侦听器,每当子视图被回收时都会被通知。 |
void |
setScrollingTouchSlop(int slopConstant) 为特定用例配置滚动触摸边框。 |
void |
setViewCacheExtension(RecyclerView.ViewCacheExtension extension) 设置一个新的 |
void |
smoothScrollBy(int dx, int dy) 沿任一轴按给定数量的像素动画滚动。 |
void |
smoothScrollToPosition(int position) 开始平滑滚动到适配器位置。 |
boolean |
startNestedScroll(int axes) 沿给定轴开始可嵌套滚动操作。 |
void |
stopNestedScroll() 停止正在进行的嵌套滚动。 |
void |
stopScroll() 停止正在进行的任何当前滚动,例如由 |
void |
swapAdapter(Adapter adapter, boolean removeAndRecycleExistingViews) 用提供的交换机替换当前的适配器。 |
Protected methods |
|
---|---|
boolean |
checkLayoutParams(ViewGroup.LayoutParams p) |
void |
dispatchRestoreInstanceState(SparseArray<Parcelable> container) 覆盖以防止适配器创建的任何视图解冻。 |
void |
dispatchSaveInstanceState(SparseArray<Parcelable> container) 覆盖以防止冻结由适配器创建的任何视图。 |
ViewGroup.LayoutParams |
generateDefaultLayoutParams() 返回一组默认布局参数。 |
ViewGroup.LayoutParams |
generateLayoutParams(ViewGroup.LayoutParams p) 根据提供的布局参数返回一组安全的布局参数。 |
int |
getChildDrawingOrder(int childCount, int i) 返回为此迭代绘制的子的索引。 |
void |
onAttachedToWindow() 这在视图附加到窗口时被调用。 |
void |
onDetachedFromWindow() 这是在视图从窗口分离时调用的。 |
void |
onLayout(boolean changed, int l, int t, int r, int b) 当这个视图为每个孩子分配一个大小和位置时,从布局调用。 |
void |
onMeasure(int widthSpec, int heightSpec) 测量视图及其内容以确定测量宽度和测量高度。 |
boolean |
onRequestFocusInDescendants(int direction, Rect previouslyFocusedRect) 找一个后裔打电话给 |
void |
onRestoreInstanceState(Parcelable state) 吊钩允许视图重新应用先前由 |
Parcelable |
onSaveInstanceState() 钩子允许视图生成其内部状态的表示,稍后可用于创建具有相同状态的新实例。 |
void |
onSizeChanged(int w, int h, int oldw, int oldh) 当这个视图的大小发生变化时,这在布局期间被调用。 |
void |
removeDetachedView(View child, boolean animate) 完成删除分离的视图。 |
Inherited methods |
|
---|---|
From class android.view.ViewGroup
|
|
From class android.view.View
|
|
From class java.lang.Object
|
|
From interface android.view.ViewParent
|
|
From interface android.view.ViewManager
|
|
From interface android.graphics.drawable.Drawable.Callback
|
|
From interface android.view.KeyEvent.Callback
|
|
From interface android.view.accessibility.AccessibilityEventSource
|
|
From interface android.support.v4.view.ScrollingView
|
|
From interface android.support.v4.view.NestedScrollingChild
|
要使用的布局管理器的类名称。
The class must extend android.support.v7.widget.RecyclerView$LayoutManager and have either a default constructor or constructor with the signature (android.content.Context, android.util.AttributeSet, int, int). If the name starts with a '.', application package is prefixed. Else, if the name contains a '.', the classname is assumed to be a full class name. Else, the recycler view package name (android.support.v7.widget) is prefixed.可能是一个字符串值,使用'\\;' 转义字符如'\\ n'或'\\ uxxxx'作为unicode字符;
int HORIZONTAL
常量值:0(0x00000000)
int INVALID_TYPE
常量值:-1(0xffffffff)
long NO_ID
常量值:-1(0xffffffffffffffff)
int NO_POSITION
常量值:-1(0xffffffff)
int SCROLL_STATE_DRAGGING
RecyclerView目前正在被外部输入如用户触摸输入拖动。
也可以看看:
常数值:1(0x00000001)
int SCROLL_STATE_IDLE
RecyclerView目前不在滚动。
也可以看看:
常量值:0(0x00000000)
int SCROLL_STATE_SETTLING
RecyclerView目前正在动画到最终位置,而不受外界控制。
也可以看看:
常量值:2(0x00000002)
int TOUCH_SLOP_DEFAULT
常量用于setScrollingTouchSlop(int)
。 表示RecyclerView应该使用标准的触控斜面进行平滑,连续的滚动。
常量值:0(0x00000000)
int TOUCH_SLOP_PAGING
常量用于setScrollingTouchSlop(int)
。 指示RecyclerView应该使用标准的触摸边框来滚动捕捉页面或其他粗糙屏障的小部件。
常数值:1(0x00000001)
int VERTICAL
常数值:1(0x00000001)
RecyclerView (Context context, AttributeSet attrs)
Parameters | |
---|---|
context |
Context
|
attrs |
AttributeSet
|
RecyclerView (Context context, AttributeSet attrs, int defStyle)
Parameters | |
---|---|
context |
Context
|
attrs |
AttributeSet
|
defStyle |
int
|
void addFocusables (ArrayList<View> views, int direction, int focusableMode)
将视图后代的任何可聚焦视图添加到视图中(可能包括该视图,如果它本身是可聚焦的话)。 如果我们处于触摸模式,则该方法会添加所有可聚焦视图,或者只有在触摸模式下可以聚焦的视图才可以聚焦;如果根据可聚焦模式参数启用了辅助功能,则只有可以使用辅助焦点的视图。
Parameters | |
---|---|
views |
ArrayList : Focusable views found so far or null if all we are interested is the number of focusables. |
direction |
int : The direction of the focus. |
focusableMode |
int : The type of focusables to be added. |
void addItemDecoration (RecyclerView.ItemDecoration decor)
添加一个RecyclerView.ItemDecoration
到这个RecyclerView。 商品装饰可以影响个别商品视图的测量和绘图。
物品装饰品已订购。 先放置在列表中的装饰将首先运行/查询/绘制,以便对项目视图产生影响。 填充添加到视图将嵌套; 先前装饰添加的填充将意味着列表中的更多项目装饰将被要求在先前装饰的给定区域内绘制/填充。
Parameters | |
---|---|
decor |
RecyclerView.ItemDecoration : Decoration to add |
void addItemDecoration (RecyclerView.ItemDecoration decor, int index)
添加一个RecyclerView.ItemDecoration
到这个RecyclerView。 商品装饰可以影响个别商品视图的测量和绘图。
物品装饰品已订购。 先放置在列表中的装饰将首先运行/查询/绘制,以便对项目视图产生影响。 填充添加到视图将嵌套; 先前装饰添加的填充将意味着列表中的更多项目装饰将被要求在先前装饰的给定区域内绘制/填充。
Parameters | |
---|---|
decor |
RecyclerView.ItemDecoration : Decoration to add |
index |
int : Position in the decoration chain to insert this decoration at. If this value is negative the decoration will be added at the end. |
void addOnChildAttachStateChangeListener (RecyclerView.OnChildAttachStateChangeListener listener)
注册一个监听器,当子视图连接到RecyclerView或从RecyclerView分离时,将会收到通知。
当LayoutManager或RecyclerView决定不再需要子视图时,将调用此侦听器。 如果应用程序将昂贵或重量级数据与项目视图相关联,则这可能是发布或释放这些资源的好地方。
Parameters | |
---|---|
listener |
RecyclerView.OnChildAttachStateChangeListener : Listener to register |
void addOnItemTouchListener (RecyclerView.OnItemTouchListener listener)
添加 RecyclerView.OnItemTouchListener
以在将触发事件分派到子视图或此视图的标准滚动行为之前拦截它们。
客户端代码可以使用监听器来实现项目操作行为。 一旦侦听器从onInterceptTouchEvent(RecyclerView, MotionEvent)
返回true, onInterceptTouchEvent(RecyclerView, MotionEvent)
为每个传入的onInterceptTouchEvent(RecyclerView, MotionEvent)
其方法onTouchEvent(RecyclerView, MotionEvent)
,直到手势结束。
Parameters | |
---|---|
listener |
RecyclerView.OnItemTouchListener : Listener to add |
void addOnScrollListener (RecyclerView.OnScrollListener listener)
添加一个侦听器,将会通知任何滚动状态或位置的变化。
添加侦听器的组件在完成时应小心删除它。 拥有视图所有权的其他组件可能会调用clearOnScrollListeners()
来删除所有附加的监听器。
Parameters | |
---|---|
listener |
RecyclerView.OnScrollListener : listener to set or null to clear |
void clearOnChildAttachStateChangeListeners ()
删除通过 addOnChildAttachStateChangeListener(OnChildAttachStateChangeListener)
添加的所有侦听 addOnChildAttachStateChangeListener(OnChildAttachStateChangeListener)
。
void clearOnScrollListeners ()
移除已通知滚动状态或位置发生任何更改的所有辅助侦听器。
int computeHorizontalScrollExtent ()
计算水平滚动条拇指在水平范围内的水平范围。 该值用于计算滚动条轨道内的拇指长度。
范围以任意单位表示,必须与 computeHorizontalScrollRange()
和 computeHorizontalScrollOffset()
使用的单位相同。
默认实现返回0。
如果您想支持滚动条, computeHorizontalScrollExtent(RecyclerView.State)
在LayoutManager中覆盖 computeHorizontalScrollExtent(RecyclerView.State)
。
Returns | |
---|---|
int |
The horizontal extent of the scrollbar's thumb |
int computeHorizontalScrollOffset ()
计算水平滚动条拇指在水平范围内的水平偏移量。 该值用于计算滚动条轨道内的拇指长度。
范围以任意单位表示,必须与 computeHorizontalScrollRange()
和 computeHorizontalScrollExtent()
使用的单位相同。
默认实现返回0。
如果您想支持滚动条, computeHorizontalScrollOffset(RecyclerView.State)
在LayoutManager中覆盖 computeHorizontalScrollOffset(RecyclerView.State)
。
Returns | |
---|---|
int |
The horizontal offset of the scrollbar's thumb |
也可以看看:
int computeHorizontalScrollRange ()
计算水平滚动条代表的水平范围。
范围以任意单位表示,必须与 computeHorizontalScrollExtent()
和 computeHorizontalScrollOffset()
使用的单位相同。
默认实现返回0。
如果您想支持滚动条, computeHorizontalScrollRange(RecyclerView.State)
在LayoutManager中覆盖 computeHorizontalScrollRange(RecyclerView.State)
。
Returns | |
---|---|
int |
The total horizontal range represented by the vertical scrollbar |
int computeVerticalScrollExtent ()
计算垂直滚动条拇指在垂直范围内的垂直范围。 该值用于计算滚动条轨道内的拇指长度。
范围以任意单位表示,必须与 computeVerticalScrollRange()
和 computeVerticalScrollOffset()
使用的单位相同。
默认实现返回0。
如果您想支持滚动条, computeVerticalScrollExtent(RecyclerView.State)
在LayoutManager中覆盖 computeVerticalScrollExtent(RecyclerView.State)
。
Returns | |
---|---|
int |
The vertical extent of the scrollbar's thumb |
int computeVerticalScrollOffset ()
计算垂直滚动条拇指在垂直范围内的垂直偏移量。 该值用于计算滚动条轨道内的拇指长度。
范围以任意单位表示,必须与 computeVerticalScrollRange()
和 computeVerticalScrollExtent()
使用的单位相同。
默认实现返回0。
如果您想支持滚动条, computeVerticalScrollOffset(RecyclerView.State)
在LayoutManager中覆盖 computeVerticalScrollOffset(RecyclerView.State)
。
Returns | |
---|---|
int |
The vertical offset of the scrollbar's thumb |
也可以看看:
int computeVerticalScrollRange ()
计算垂直滚动条代表的垂直范围。
范围以任意单位表示,必须与 computeVerticalScrollExtent()
和 computeVerticalScrollOffset()
使用的单位相同。
默认实现返回0。
如果您想支持滚动条, computeVerticalScrollRange(RecyclerView.State)
在LayoutManager中覆盖 computeVerticalScrollRange(RecyclerView.State)
。
Returns | |
---|---|
int |
The total vertical range represented by the vertical scrollbar |
boolean dispatchNestedFling (float velocityX, float velocityY, boolean consumed)
向嵌套滚动父级派发一个投掷。
应该使用此方法来指示嵌套滚动的孩子已经检测到适用于投掷的适当条件。 通常这意味着触摸滚动以velocity
结束,滚动方向沿着可滚动轴线满足或超过minimum fling velocity
。
如果嵌套的滚动子视图通常会抛出,但它位于其自己的内容的边缘,则可以使用此方法代替该嵌套的滚动父级。 父母可以有选择地消费一下,或者观察孩子的情绪。
Parameters | |
---|---|
velocityX |
float : Horizontal fling velocity in pixels per second |
velocityY |
float : Vertical fling velocity in pixels per second |
consumed |
boolean : true if the child consumed the fling, false otherwise |
Returns | |
---|---|
boolean |
true if the nested scrolling parent consumed or otherwise reacted to the fling |
boolean dispatchNestedPreFling (float velocityX, float velocityY)
在此视图处理它之前,将嵌套分派给嵌套的滚动父级。
嵌套的预先掷骰事件是嵌套的掷骰事件,触摸截取是触摸的,嵌套的预滚动是嵌套滚动。 dispatchNestedPreFling
在子视图消耗它之前,为嵌套的一排中的父视图偏移一个机会以完全消耗该dispatchNestedPreFling
。 如果此方法返回true
,则嵌套的父视图会消耗该块,并且该视图不应该作为结果滚动。
为了获得更好的用户体验,嵌套滚动链中只有一个视图应该一次使用这个文件。 如果父视图消耗了这个方法,这个方法将返回false。 自定义视图实现应该以两种方式解决这个问题:
dispatchNestedPreFling
; consume the fling and settle to a valid position regardless.视图也不应该在当前不支持滚动的坐标轴上为嵌套父视图提供快速速度; 一个ScrollView
不应该提供一个水平的ScrollView
速度给它的父母,因为沿该轴的滚动是不被允许的,并且沿着该运动的速度没有意义。
Parameters | |
---|---|
velocityX |
float : Horizontal fling velocity in pixels per second |
velocityY |
float : Vertical fling velocity in pixels per second |
Returns | |
---|---|
boolean |
true if a nested scrolling parent consumed the fling |
boolean dispatchNestedPreScroll (int dx, int dy, int[] consumed, int[] offsetInWindow)
在该视图消耗其任何部分之前,调度正在进行的嵌套滚动的一个步骤。
嵌套的预滚动事件是嵌套的滚动事件是什么触摸拦截要触摸。 dispatchNestedPreScroll
为嵌套滚动操作中的父视图提供了在子视图消耗它之前消耗部分或全部滚动操作的机会。
Parameters | |
---|---|
dx |
int : Horizontal scroll distance in pixels |
dy |
int : Vertical scroll distance in pixels |
consumed |
int : Output. If not null, consumed[0] will contain the consumed component of dx and consumed[1] the consumed dy. |
offsetInWindow |
int : Optional. If not null, on return this will contain the offset in local view coordinates of this view from before this operation to after it completes. View implementations may use this to adjust expected input coordinate tracking. |
Returns | |
---|---|
boolean |
true if the parent consumed some or all of the scroll delta |
boolean dispatchNestedScroll (int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, int[] offsetInWindow)
发送正在进行的嵌套滚动的一个步骤。
支持嵌套滚动的视图实现应该调用它来报告正在进行的滚动信息到当前嵌套的滚动父项。 如果嵌套滚动当前没有进行,或者对于该视图嵌套滚动不是enabled
,则此方法不执行任何操作。
在使用滚动事件本身的组件之前,兼容的视图实现也应该调用 dispatchNestedPreScroll
。
Parameters | |
---|---|
dxConsumed |
int : Horizontal distance in pixels consumed by this view during this scroll step |
dyConsumed |
int : Vertical distance in pixels consumed by this view during this scroll step |
dxUnconsumed |
int : Horizontal scroll distance in pixels not consumed by this view |
dyUnconsumed |
int : Horizontal scroll distance in pixels not consumed by this view |
offsetInWindow |
int : Optional. If not null, on return this will contain the offset in local view coordinates of this view from before this operation to after it completes. View implementations may use this to adjust expected input coordinate tracking. |
Returns | |
---|---|
boolean |
true if the event was dispatched, false if it could not be dispatched. |
void draw (Canvas c)
手动将此视图(及其所有子项)呈现给定的Canvas。 在调用这个函数之前,视图必须已经完成了一个完整的布局。 在实现视图时,实现onDraw(android.graphics.Canvas)
而不是重写此方法。 如果您确实需要重写此方法,请调用超类版本。
Parameters | |
---|---|
c |
Canvas : The Canvas to which the View is rendered. |
boolean drawChild (Canvas canvas, View child, long drawingTime)
绘制这个视图组的一个孩子。 这个方法负责让画布处于正确的状态。 这包括剪裁,翻译,以便孩子的滚动起点在0,0,并应用任何动画转换。
Parameters | |
---|---|
canvas |
Canvas : The canvas on which to draw the child |
child |
View : Who to draw |
drawingTime |
long : The time at which draw is occurring |
Returns | |
---|---|
boolean |
True if an invalidate() was issued |
View findChildViewUnder (float x, float y)
找到给定点下的最顶层视图。
Parameters | |
---|---|
x |
float : Horizontal position in pixels to search |
y |
float : Vertical position in pixels to search |
Returns | |
---|---|
View |
The child view under (x, y) or null if no matching child is found |
View findContainingItemView (View view)
遍历给定视图的祖先,并返回包含它的项目视图,也是RecyclerView的直接子视图。 通过调用getChildViewHolder(View)
可以使用此返回的视图来获取getChildViewHolder(View)
。
Parameters | |
---|---|
view |
View : The view that is a descendant of the RecyclerView. |
Returns | |
---|---|
View |
The direct child of the RecyclerView which contains the given view or null if the provided view is not a descendant of this RecyclerView. |
RecyclerView.ViewHolder findContainingViewHolder (View view)
返回包含给定视图的ViewHolder。
Parameters | |
---|---|
view |
View : The view that is a descendant of the RecyclerView. |
Returns | |
---|---|
RecyclerView.ViewHolder |
The ViewHolder that contains the given view or null if the provided view is not a descendant of this RecyclerView. |
RecyclerView.ViewHolder findViewHolderForAdapterPosition (int position)
返回数据集给定位置的项目的ViewHolder。 与findViewHolderForLayoutPosition(int)
不同,此方法考虑到了所有尚未反映到布局中的未决适配器更改。 另一方面,如果notifyDataSetChanged()
但新的布局尚未计算,则此方法将返回null
因为在计算布局之前,新的视图位置是未知的。
此方法仅检查RecyclerView的子项。 如果给定的position
的项目没有布置,它将不会创建一个新项目。
当ItemAnimator运行更改动画时,可能有2个ViewHolders表示相同的Item。 在这种情况下,将返回更新后的ViewHolder。
Parameters | |
---|---|
position |
int : The position of the item in the data set of the adapter |
Returns | |
---|---|
RecyclerView.ViewHolder |
The ViewHolder at position or null if there is no such item |
RecyclerView.ViewHolder findViewHolderForItemId (long id)
返回具有给定ID的项目的ViewHolder。 RecyclerView必须使用带有stableIds
的适配器才能返回非空值。
此方法仅检查RecyclerView的子项。 如果具有给定的id
的项目未布置,则不会创建新项目。 当ItemAnimator运行更改动画时,可能会有2个具有相同ID的ViewHolders。 在这种情况下,将返回更新后的ViewHolder。
Parameters | |
---|---|
id |
long : The id for the requested item |
Returns | |
---|---|
RecyclerView.ViewHolder |
The ViewHolder with the given id or null if there is no such item |
RecyclerView.ViewHolder findViewHolderForLayoutPosition (int position)
返回数据集中给定位置的项目的ViewHolder,从最新的布局阶段开始。
此方法仅检查RecyclerView的子项。 如果给定的position
项目没有布置,它将不会创建一个新项目。
请注意,当适配器内容更改时,ViewHolder位置不会更新,直到下一个布局计算。 如果有未完成的适配器更新,则此方法的返回值可能与您的适配器内容不匹配。 您可以使用# getAdapterPosition()
获取getAdapterPosition()
的当前适配器位置。
当ItemAnimator运行更改动画时,可能会有2个ViewHolders具有相同的布局位置来表示相同的Item。 在这种情况下,将返回更新后的ViewHolder。
Parameters | |
---|---|
position |
int : The position of the item in the data set of the adapter |
Returns | |
---|---|
RecyclerView.ViewHolder |
The ViewHolder at position or null if there is no such item |
RecyclerView.ViewHolder findViewHolderForPosition (int position)
此方法已弃用。
使用findViewHolderForLayoutPosition(int)
或findViewHolderForAdapterPosition(int)
Parameters | |
---|---|
position |
int
|
Returns | |
---|---|
RecyclerView.ViewHolder |
boolean fling (int velocityX, int velocityY)
以每秒像素为单位,以每个轴的初始速度开始标准投掷。 如果给定的速度低于系统定义的最小值,则此方法将返回false并且不会发生飞掷。
Parameters | |
---|---|
velocityX |
int : Initial horizontal velocity in pixels per second |
velocityY |
int : Initial vertical velocity in pixels per second |
Returns | |
---|---|
boolean |
true if the fling was started, false if the velocity was too low to fling or LayoutManager does not support scrolling in the axis fling is issued. |
View focusSearch (View focused, int direction)
由于RecyclerView是一个包含虚拟子项(包含在适配器中但在用户界面中不可见的项目)的ViewGroup集合,因此它采用了与其他ViewGroup不同的更加涉及的焦点搜索策略。
它首先在RecyclerView中进行重点搜索。 如果此搜索找到相对于当前聚焦的视图处于焦点方向的视图,则RecyclerView将该子视为下一个焦点目标。 当它找不到这样的孩子时,它调用onFocusSearchFailed(View, int, Recycler, State)
在焦点搜索方向上布置更多视图。 如果LayoutManager添加一个匹配焦点搜索条件的视图,它将作为焦点搜索结果返回。 否则,RecyclerView将调用父级像处理常规ViewGroup一样处理焦点搜索。
当方向为FOCUS_FORWARD
或FOCUS_BACKWARD
,如果适配器在对焦方向上有更多子对象,则未处于对焦方向的视图仍然是有效的对焦目标,该对象可能不是所需的行为。 为了处理这种情况,RecyclerView将焦点方向转换为绝对方向,并在该方向进行初步焦点搜索。 如果没有视图获得焦点,则在使用原始(相对)方向运行焦点搜索之前,它将调用onFocusSearchFailed(View, int, Recycler, State)
。 这允许RecyclerView为焦点搜索提供更好的候选,同时仍然允许视图系统从RecyclerView获得焦点,并且如果存在这样的小孩,则将其给予更合适的孩子。
Parameters | |
---|---|
focused |
View : The view that currently has focus |
direction |
int : One of FOCUS_UP , FOCUS_DOWN , FOCUS_LEFT , FOCUS_RIGHT , FOCUS_FORWARD , FOCUS_BACKWARD or 0 for not applicable. |
Returns | |
---|---|
View |
A new View that can be the next focus after the focused View |
ViewGroup.LayoutParams generateLayoutParams (AttributeSet attrs)
根据提供的属性集返回一组新的布局参数。
Parameters | |
---|---|
attrs |
AttributeSet : the attributes to build the layout parameters from |
Returns | |
---|---|
ViewGroup.LayoutParams |
an instance of ViewGroup.LayoutParams or one of its descendants |
Adapter getAdapter ()
检索先前设置的适配器;如果未设置适配器,则返回null。
Returns | |
---|---|
Adapter |
The previously set adapter |
也可以看看:
int getBaseline ()
将RecyclerView文本基线的偏移量从其顶部边界返回。 如果此RecyclerView的LayoutManager不支持基线对齐,则此方法返回-1。
Returns | |
---|---|
int |
the offset of the baseline within the RecyclerView's bounds or -1 if baseline alignment is not supported |
int getChildAdapterPosition (View child)
返回给定子视图对应的适配器位置。
Parameters | |
---|---|
child |
View : Child View to query |
Returns | |
---|---|
int |
Adapter position corresponding to the given view or NO_POSITION |
long getChildItemId (View child)
返回给定子视图对应的稳定项目标识。
Parameters | |
---|---|
child |
View : Child View to query |
Returns | |
---|---|
long |
Item id corresponding to the given view or NO_ID |
int getChildLayoutPosition (View child)
返回给定子视图的适配器位置以及最近完成的布局传递。
如果尚未反映到布局中的适配器有未决更改,则此位置可能不等于项目的适配器位置。
Parameters | |
---|---|
child |
View : Child View to query |
Returns | |
---|---|
int |
Adapter position of the given View as of last layout pass or NO_POSITION if the View is representing a removed item. |
int getChildPosition (View child)
此方法已弃用。
使用getChildAdapterPosition(View)
或getChildLayoutPosition(View)
。
Parameters | |
---|---|
child |
View
|
Returns | |
---|---|
int |
RecyclerView.ViewHolder getChildViewHolder (View child)
检索给 RecyclerView.ViewHolder
视图的 RecyclerView.ViewHolder
。
Parameters | |
---|---|
child |
View : Child of this RecyclerView to query for its ViewHolder |
Returns | |
---|---|
RecyclerView.ViewHolder |
The child view's ViewHolder |
RecyclerViewAccessibilityDelegate getCompatAccessibilityDelegate ()
返回RecyclerView使用的可访问性委托兼容性实现。
Returns | |
---|---|
RecyclerViewAccessibilityDelegate |
An instance of AccessibilityDelegateCompat used by RecyclerView |
RecyclerView.ItemAnimator getItemAnimator ()
获取此RecyclerView的当前ItemAnimator。 空返回值表示不存在动画制作者,并且该项目更改将在没有任何动画的情况下发生。 默认情况下,RecyclerView将实例化并使用DefaultItemAnimator
的实例。
Returns | |
---|---|
RecyclerView.ItemAnimator |
ItemAnimator The current ItemAnimator. If null, no animations will occur when changes occur to the items in this RecyclerView. |
RecyclerView.LayoutManager getLayoutManager ()
返回目前负责此RecyclerView布局策略的 RecyclerView.LayoutManager
。
Returns | |
---|---|
RecyclerView.LayoutManager |
The currently bound LayoutManager |
int getMaxFlingVelocity ()
返回此RecyclerView使用的最大投掷速度。
Returns | |
---|---|
int |
The maximum fling velocity used by this RecyclerView. |
int getMinFlingVelocity ()
返回启动投掷的最低速度。
Returns | |
---|---|
int |
The minimum velocity to start a fling |
boolean getPreserveFocusAfterLayout ()
如果RecyclerView应该尝试保留当前聚焦的Adapter Item的焦点,即使在布局计算期间替换表示Item的View也会返回true。
默认情况下,此值为 true
。
Returns | |
---|---|
boolean |
True if the RecyclerView will try to preserve focused Item after a layout if it loses focus. |
RecyclerView.RecycledViewPool getRecycledViewPool ()
检索这个RecyclerView的RecyclerView.RecycledViewPool
。 这个方法永远不会返回null; 如果没有为该视图设置池,则会创建一个新池。 有关更多信息,请参阅setRecycledViewPool
。
Returns | |
---|---|
RecyclerView.RecycledViewPool |
The pool used to store recycled item views for reuse. |
int getScrollState ()
返回RecyclerView的当前滚动状态。
Returns | |
---|---|
int |
SCROLL_STATE_IDLE , SCROLL_STATE_DRAGGING or SCROLL_STATE_SETTLING |
boolean hasFixedSize ()
Returns | |
---|---|
boolean |
true if the app has specified that changes in adapter content cannot change the size of the RecyclerView itself. |
boolean hasNestedScrollingParent ()
如果此视图具有嵌套滚动父级,则返回true。
嵌套滚动父项的存在表示该视图已启动嵌套滚动,并且被视图层次结构的更上层的祖先视图接受。
Returns | |
---|---|
boolean |
whether this view has a nested scrolling parent |
boolean hasPendingAdapterUpdates ()
返回是否有尚未应用于布局的待定适配器更新。
如果此方法返回true
,则表示用户当前正在查看的内容可能不会反映它们的适配器内容(取决于发生了什么变化)。 您可以使用此信息推迟或取消某些操作。
如果RecyclerView在连接到窗口或更换了适配器后尚未计算出第一个布局,则此方法返回true。
Returns | |
---|---|
boolean |
True if there are some adapter updates which are not yet reflected to layout or false if layout is up to date. |
void invalidateItemDecorations ()
使所有ItemDecorations无效。 如果RecyclerView具有项目装饰,调用此方法将触发requestLayout()
调用。
boolean isAnimating ()
如果RecyclerView当前正在运行一些动画,则返回true。
如果您想在动画完成时收到通知,请使用 isRunning(ItemAnimator.ItemAnimatorFinishedListener)
。
Returns | |
---|---|
boolean |
True if there are some item animations currently running or waiting to be started. |
boolean isAttachedToWindow ()
如果RecyclerView附加到窗口,则返回true。
Returns | |
---|---|
boolean |
boolean isComputingLayout ()
返回RecyclerView是否正在计算布局。
如果此方法返回true,则意味着RecyclerView处于锁定状态,并且任何尝试更新适配器内容都将导致异常,因为在RecyclerView尝试计算布局时无法更改适配器内容。
在这种状态下运行代码的可能性不大,因为当布局遍历发生时,或者RecyclerView开始滚动以响应系统事件(触摸,辅助功能等)时,框架会调用它。
如果您有一些自定义逻辑来更改适配器内容以响应在布局计算期间可能触发的View回调(例如焦点更改回调),则可能会发生这种情况。 在这些情况下,您应该使用Handler或类似机制推迟更改。
Returns | |
---|---|
boolean |
true if RecyclerView is currently computing a layout, false otherwise |
boolean isLayoutFrozen ()
如果布局和滚动被冻结,则返回true。
Returns | |
---|---|
boolean |
true if layout and scroll are frozen |
也可以看看:
boolean isNestedScrollingEnabled ()
如果对此视图启用嵌套滚动,则返回true。
如果启用了嵌套滚动并且此View类实现支持它,则该视图将在适用时充当嵌套滚动子视图,将有关正在进行的滚动操作的数据转发给兼容且协作的嵌套滚动父级。
Returns | |
---|---|
boolean |
true if nested scrolling is enabled |
void offsetChildrenHorizontal (int dx)
将所有子视图的边界偏移dx
像素。 用于在LayoutManagers
实现简单的滚动。
Parameters | |
---|---|
dx |
int : Horizontal pixel offset to apply to the bounds of all child views |
void offsetChildrenVertical (int dy)
将所有子视图的边界偏移dy
像素。 用于在LayoutManagers
实现简单的滚动。
Parameters | |
---|---|
dy |
int : Vertical pixel offset to apply to the bounds of all child views |
void onChildAttachedToWindow (View child)
在项目视图附加到此RecyclerView时调用。
RecyclerView的子类可能希望在附加子视图时执行额外的簿记或修改。 这将在RecyclerView.LayoutManager
测量或RecyclerView.LayoutManager
视图之前调用,并且是执行这些更改的好时机。
Parameters | |
---|---|
child |
View : Child view that is now attached to this RecyclerView and its associated window |
void onChildDetachedFromWindow (View child)
在从此RecyclerView分离项目视图时调用。
RecyclerView的子类可能希望在子视图分离时执行额外的簿记或修改子视图。 这将被称为RecyclerView.LayoutManager
完全分离父窗口和子窗口的子视图。
Parameters | |
---|---|
child |
View : Child view that is now detached from this RecyclerView and its associated window |
void onDraw (Canvas c)
实施这个来做你的绘画。
Parameters | |
---|---|
c |
Canvas : the canvas on which the background will be drawn |
boolean onGenericMotionEvent (MotionEvent event)
实现此方法来处理通用运动事件。
通用运动事件描述操纵杆运动,鼠标悬停,触控板触摸,滚轮运动和其他输入事件。 运动事件的source
指定了接收的输入类别。 此方法的实现必须在处理事件之前检查源中的位。 以下代码示例显示了这是如何完成的。
源类为SOURCE_CLASS_POINTER
通用运动事件传递到指针下的视图。 所有其他通用运动事件都会传送到重点视图。
public boolean onGenericMotionEvent(MotionEvent event) { if (event.isFromSource(InputDevice.SOURCE_CLASS_JOYSTICK)) { if (event.getAction() == MotionEvent.ACTION_MOVE) { // process the joystick movement... return true; } } if (event.isFromSource(InputDevice.SOURCE_CLASS_POINTER)) { switch (event.getAction()) { case MotionEvent.ACTION_HOVER_MOVE: // process the mouse hover movement... return true; case MotionEvent.ACTION_SCROLL: // process the scroll wheel movement... return true; } } return super.onGenericMotionEvent(event); }
Parameters | |
---|---|
event |
MotionEvent : The generic motion event being processed. |
Returns | |
---|---|
boolean |
True if the event was handled, false otherwise. |
boolean onInterceptTouchEvent (MotionEvent e)
实施此方法来拦截所有触摸屏幕动作事件。 这允许您在事件发送给您的孩子时观看事件,并在任何时候掌握当前手势的所有权。
使用这个函数需要注意,因为它与View.onTouchEvent(MotionEvent)
有一个相当复杂的交互,并且使用它需要以正确的方式执行该方法。 活动将按以下顺序收到:
ACTION_CANCEL
, and all further events will be delivered to your onTouchEvent() method and no longer appear here. Parameters | |
---|---|
e |
MotionEvent : The motion event being dispatched down the hierarchy. |
Returns | |
---|---|
boolean |
Return true to steal motion events from the children and have them dispatched to this ViewGroup through onTouchEvent(). The current target will receive an ACTION_CANCEL event, and no further messages will be delivered here. |
void onScrollStateChanged (int state)
当此RecyclerView的滚动状态改变时调用。 子类应该使用此方法来响应状态更改而不是显式侦听器。
此方法将始终在侦听器之前调用,但在LayoutManager响应滚动状态更改之后调用。
Parameters | |
---|---|
state |
int : the new scroll state, one of SCROLL_STATE_IDLE , SCROLL_STATE_DRAGGING or SCROLL_STATE_SETTLING |
void onScrolled (int dx, int dy)
当此RecyclerView的滚动位置改变时调用。 子类应该使用此方法来响应适配器数据集内的滚动而不是显式侦听器。
此方法将始终在侦听器之前调用。 如果一个子类需要在滚动后但在听众跑之前执行任何额外的维护或簿记,这是一个很好的选择。
这与onScrollChanged(int, int, int, int)
不同之处在于它接收适配器数据集内任一方向滚动的距离,而不是绝对滚动坐标。 由于RecyclerView无法从数据集中的任意点计算绝对滚动位置,因此onScrollChanged
将始终收到与数据集滚动位置不对应的当前值getScrollX()
和getScrollY()
。 但是,有些子类可能会选择将这些字段用作特殊偏移量。
Parameters | |
---|---|
dx |
int : horizontal distance scrolled in pixels |
dy |
int : vertical distance scrolled in pixels |
boolean onTouchEvent (MotionEvent e)
实现此方法来处理触摸屏幕动作事件。
如果此方法用于检测点击操作,建议通过执行并调用performClick()
来执行操作。 这将确保一致的系统行为,包括:
ACTION_CLICK
when accessibility features are enabled Parameters | |
---|---|
e |
MotionEvent : The motion event. |
Returns | |
---|---|
boolean |
True if the event was handled, false otherwise. |
void removeItemDecoration (RecyclerView.ItemDecoration decor)
从此RecyclerView中删除 RecyclerView.ItemDecoration
。
给定的装饰将不再影响项目视图的测量和绘制。
Parameters | |
---|---|
decor |
RecyclerView.ItemDecoration : Decoration to remove |
void removeOnChildAttachStateChangeListener (RecyclerView.OnChildAttachStateChangeListener listener)
从附加子状态侦听器列表中删除提供的侦听器。
Parameters | |
---|---|
listener |
RecyclerView.OnChildAttachStateChangeListener : Listener to unregister |
void removeOnItemTouchListener (RecyclerView.OnItemTouchListener listener)
删除RecyclerView.OnItemTouchListener
。 它将不再能够拦截触摸事件。
Parameters | |
---|---|
listener |
RecyclerView.OnItemTouchListener : Listener to remove |
void removeOnScrollListener (RecyclerView.OnScrollListener listener)
移除已通知滚动状态或位置发生任何更改的侦听器。
Parameters | |
---|---|
listener |
RecyclerView.OnScrollListener : listener to set or null to clear |
void requestChildFocus (View child, View focused)
当这个父母的孩子需要关注时调用
Parameters | |
---|---|
child |
View : The child of this ViewParent that wants focus. This view will contain the focused view. It is not necessarily the view that actually has focus. |
focused |
View : The view that is a descendant of child that actually has focus |
boolean requestChildRectangleOnScreen (View child, Rect rect, boolean immediate)
当该组的小孩想要将特定矩形定位到屏幕上时调用。 ViewGroup
重写这可以相信:
ViewGroup
压倒一切应该维护合同:
Parameters | |
---|---|
child |
View : The direct child making the request. |
rect |
Rect : The rectangle in the child's coordinates the child wishes to be on the screen. |
immediate |
boolean : True to forbid animated or delayed scrolling, false otherwise |
Returns | |
---|---|
boolean |
Whether the group scrolled to handle the operation |
void requestDisallowInterceptTouchEvent (boolean disallowIntercept)
当孩子不希望这个父母及其祖先用 onInterceptTouchEvent(MotionEvent)
拦截触摸事件时 onInterceptTouchEvent(MotionEvent)
。
这位家长应该将此通知传递给其父母。 这位家长必须在接触期间服从这个要求(也就是说,只有在这位家长收到了或取消后才清除标志。
Parameters | |
---|---|
disallowIntercept |
boolean : True if the child does not want the parent to intercept touch events. |
void requestLayout ()
当事情发生变化时调用它,这已经使这个视图的布局无效。 这将安排视图树的布局传递。 当视图层次结构当前处于布局阶段时,不应调用此视图层次结构( isInLayout()
。如果isInLayout()
布局,则可以在当前布局阶段结束时接受请求(然后布局将再次运行),或者在当前帧结束之后绘制并发生下一个布局。
覆盖此方法的子类应调用超类方法以正确处理可能的布局错误请求。
void scrollBy (int x, int y)
移动视图的滚动位置。 这将导致致电onScrollChanged(int, int, int, int)
,该视图将失效。
Parameters | |
---|---|
x |
int : the amount of pixels to scroll by horizontally |
y |
int : the amount of pixels to scroll by vertically |
void scrollTo (int x, int y)
设置视图的滚动位置。 这将导致致电onScrollChanged(int, int, int, int)
,视图将失效。
Parameters | |
---|---|
x |
int : the x position to scroll to |
y |
int : the y position to scroll to |
void scrollToPosition (int position)
便捷方法滚动到某个位置。 RecyclerView不实现滚动逻辑,而是将呼叫转发到scrollToPosition(int)
Parameters | |
---|---|
position |
int : Scroll to this adapter position |
也可以看看:
void sendAccessibilityEventUnchecked (AccessibilityEvent event)
此方法的行为与 sendAccessibilityEvent(int)
完全相同,但将空白 AccessibilityEvent
作为参数,并且不会检查是否启用辅助功能。
如果 View.AccessibilityDelegate
已通过调用指定 setAccessibilityDelegate(AccessibilityDelegate)
其 sendAccessibilityEventUnchecked(View, AccessibilityEvent)
负责处理此调用。
Parameters | |
---|---|
event |
AccessibilityEvent : The event to send. |
void setAccessibilityDelegateCompat (RecyclerViewAccessibilityDelegate accessibilityDelegate)
设置RecyclerView使用的可访问性委托兼容性实现。
Parameters | |
---|---|
accessibilityDelegate |
RecyclerViewAccessibilityDelegate : The accessibility delegate to be used by RecyclerView. |
void setAdapter (Adapter adapter)
设置新的适配器以按需提供子视图。
当适配器发生变化时,所有现有的视图都会被循环回池中。 如果池只有一个适配器,它将被清除。
Parameters | |
---|---|
adapter |
Adapter : The new adapter to set, or null to set no adapter. |
void setChildDrawingOrderCallback (RecyclerView.ChildDrawingOrderCallback childDrawingOrderCallback)
设置用于绘制儿童的 RecyclerView.ChildDrawingOrderCallback
。
有关详细信息,请参阅getChildDrawingOrder(int, int)
。 调用此方法将始终调用setChildrenDrawingOrderEnabled(boolean)
。 如果childDrawingOrderCallback不为null,则该参数为true,否则为false。
请注意,View的高程可能会覆盖子级绘制顺序。
Parameters | |
---|---|
childDrawingOrderCallback |
RecyclerView.ChildDrawingOrderCallback : The ChildDrawingOrderCallback to be used by the drawing system. |
void setClipToPadding (boolean clipToPadding)
设置此ViewGroup是否将其子对象填充到其填充中,并将存在填充的任何EdgeEffect调整大小(但不剪切)到填充区域。
默认情况下,子项被剪裁到其父ViewGroup的填充。 此裁剪行为仅在填充不为零时启用。
Parameters | |
---|---|
clipToPadding |
boolean : true to clip children to the padding of the group, and resize (but not clip) any EdgeEffect to the padded region. False otherwise. |
void setHasFixedSize (boolean hasFixedSize)
如果RecyclerView可以预先知道RecyclerView的大小不受适配器内容的影响,它可以执行多次优化。 RecyclerView仍然可以根据其他因素(例如其父级的大小)更改其大小,但此大小的计算不能取决于子级的大小或其适配器的内容(适配器中的项目数量除外)。
如果您使用RecyclerView属于此类别,请将其设置为true
。 它将允许RecyclerView在适配器内容更改时避免使整个布局无效。
Parameters | |
---|---|
hasFixedSize |
boolean : true if adapter changes cannot affect the size of the RecyclerView. |
void setItemAnimator (RecyclerView.ItemAnimator animator)
设置将处理动画的RecyclerView.ItemAnimator
,这些动画涉及对此RecyclerView中项目的更改。 默认情况下,RecyclerView将实例化并使用DefaultItemAnimator
的实例。 是否为RecyclerView启用项目动画取决于ItemAnimator以及LayoutManager supports item animations
。
Parameters | |
---|---|
animator |
RecyclerView.ItemAnimator : The ItemAnimator being set. If null, no animations will occur when changes occur to the items in this RecyclerView. |
void setItemViewCacheSize (int size)
在将它们添加到可能共享的 recycled view pool
之前,设置要保留的屏幕外视图的数量。
离屏视图缓存保持了解连接适配器的变化,允许LayoutManager在未经修改的情况下重用这些视图,而无需返回适配器来重新绑定它们。
Parameters | |
---|---|
size |
int : Number of views to cache offscreen before returning them to the general recycled view pool |
void setLayoutFrozen (boolean frozen)
启用或禁用布局和滚动。 在setLayoutFrozen(true)
之后,布局请求将被推迟,直到setLayoutFrozen(false)
; 不更新子视图时RecyclerView被冻结, smoothScrollBy(int, int)
, scrollBy(int, int)
, scrollToPosition(int)
和smoothScrollToPosition(int)
被丢弃; TouchEvents和GenericMotionEvents被删除; onFocusSearchFailed(View, int, Recycler, State)
将不会被调用。
setLayoutFrozen(true)
不会阻止应用程序的直接调用 scrollToPosition(int)
, smoothScrollToPosition(RecyclerView, State, int)
。
setAdapter(Adapter)
和 swapAdapter(Adapter, boolean)
将自动停止冻结。
注意:运行ItemAnimator不会自动停止,调用者有责任调用ItemAnimator.end()。
Parameters | |
---|---|
frozen |
boolean : true to freeze layout and scroll, false to re-enable. |
void setLayoutManager (RecyclerView.LayoutManager layout)
设置此RecyclerView将使用的 RecyclerView.LayoutManager
。
与其他适配器支持的视图(如ListView
或GridView
,RecyclerView允许客户端代码为子视图提供自定义布局安排。 这些安排由RecyclerView.LayoutManager
控制。 必须提供LayoutManager以使RecyclerView正常工作。
为常见用途提供了几种默认策略,如列表和网格。
Parameters | |
---|---|
layout |
RecyclerView.LayoutManager : LayoutManager to use |
void setNestedScrollingEnabled (boolean enabled)
启用或禁用此视图的嵌套滚动。
如果此属性设置为true,则视图将被允许在当前层次结构中使用兼容父视图启动嵌套滚动操作。 如果这个视图没有实现嵌套滚动,这将不起作用。 嵌套滚动正在进行时禁用嵌套滚动具有stopping
嵌套滚动的效果。
Parameters | |
---|---|
enabled |
boolean : true to enable nested scrolling, false to disable |
void setOnScrollListener (RecyclerView.OnScrollListener listener)
此方法已弃用。
使用addOnScrollListener(OnScrollListener)
和removeOnScrollListener(OnScrollListener)
设置一个监听器,它将被通知滚动状态或位置的任何变化。
Parameters | |
---|---|
listener |
RecyclerView.OnScrollListener : Listener to set or null to clear |
void setPreserveFocusAfterLayout (boolean preserveFocusAfterLayout)
设置RecyclerView是否应该尝试在布局计算之后保留相同的项目。
通常,布局管理器会在布局前后保持焦点视图可见,但有时视图可能会在布局计算中失去焦点,因为它们的状态会发生变化,或者由于类型更改或动画而被替换为另一视图。 在这些情况下,RecyclerView可以自动请求关注新视图。
Parameters | |
---|---|
preserveFocusAfterLayout |
boolean : Whether RecyclerView should preserve focused Item during a layout calculations. Defaults to true. |
void setRecycledViewPool (RecyclerView.RecycledViewPool pool)
回收视图池允许多个RecyclerView共享一个公共的废料视图池。 如果您有多个使用相同视图类型的适配器的RecyclerView,这可能很有用,例如,如果您有几个数据集,并且ViewPager
显示的项目视图类型相同。
Parameters | |
---|---|
pool |
RecyclerView.RecycledViewPool : Pool to set. If this parameter is null a new pool will be created and used. |
void setRecyclerListener (RecyclerView.RecyclerListener listener)
注册一个侦听器,每当子视图被回收时都会被通知。
当LayoutManager或RecyclerView决定不再需要子视图时,将调用此侦听器。 如果应用程序将昂贵或重量级数据与项目视图相关联,则这可能是发布或释放这些资源的好地方。
Parameters | |
---|---|
listener |
RecyclerView.RecyclerListener : Listener to register, or null to clear |
void setScrollingTouchSlop (int slopConstant)
为特定用例配置滚动触摸边框。 根据常用用途设置RecyclerView的滚动运动阈值。 有效的参数是TOUCH_SLOP_DEFAULT
和TOUCH_SLOP_PAGING
。
Parameters | |
---|---|
slopConstant |
int : One of the TOUCH_SLOP_ constants representing the intended usage of this RecyclerView |
void setViewCacheExtension (RecyclerView.ViewCacheExtension extension)
设置一个新的 RecyclerView.ViewCacheExtension
由Recycler使用。
Parameters | |
---|---|
extension |
RecyclerView.ViewCacheExtension : ViewCacheExtension to be used or null if you want to clear the existing one. |
void smoothScrollBy (int dx, int dy)
沿任一轴按给定数量的像素动画滚动。
Parameters | |
---|---|
dx |
int : Pixels to scroll horizontally |
dy |
int : Pixels to scroll vertically |
void smoothScrollToPosition (int position)
开始平滑滚动到适配器位置。
要支持平滑滚动,您必须覆盖 smoothScrollToPosition(RecyclerView, State, int)
并创建一个 RecyclerView.SmoothScroller
。
RecyclerView.LayoutManager
负责创建实际的滚动操作。 如果您想提供自定义平滑滚动逻辑, smoothScrollToPosition(RecyclerView, State, int)
在LayoutManager中覆盖smoothScrollToPosition(RecyclerView, State, int)
。
Parameters | |
---|---|
position |
int : The adapter position to scroll to |
boolean startNestedScroll (int axes)
沿给定轴开始可嵌套滚动操作。
开始嵌套滚动的视图承诺遵守以下合同:
该视图将在启动滚动操作时调用startNestedScroll。 在触摸滚动的情况下,这对应于最初的ACTION_DOWN
。 在触摸滚动的情况下,嵌套滚动将以与requestDisallowInterceptTouchEvent(boolean)
相同的方式自动终止。 在编程滚动的情况下,调用者必须显式调用stopNestedScroll()
来指示嵌套滚动的结束。
如果startNestedScroll
返回true,则找到合作父项。 如果返回false,则在下一次滚动之前,调用方可能会忽略此合约的其余部分。 当嵌套滚动正在进行时调用startNestedScroll将返回true。
在滚动的每个增量步骤中,一旦计算出请求的滚动增量,调用者就应该调用dispatchNestedPreScroll
。 如果它返回true,则嵌套滚动父级至少部分消耗滚动,并且调用者应该调整它滚动的数量。
在应用剩余的滚动增量之后,调用者应该调用dispatchNestedScroll
,同时传递消耗的delta和未消耗的delta。 嵌套的滚动父级可能会以不同的方式处理这些值。 见onNestedScroll(View, int, int, int, int)
。
Parameters | |
---|---|
axes |
int : Flags consisting of a combination of SCROLL_AXIS_HORIZONTAL and/or SCROLL_AXIS_VERTICAL . |
Returns | |
---|---|
boolean |
true if a cooperative parent was found and nested scrolling has been enabled for the current gesture. |
void stopNestedScroll ()
停止正在进行的嵌套滚动。
当嵌套滚动当前不在进行中时调用此方法是无害的。
void stopScroll ()
停止正在进行的任何当前滚动,例如由 smoothScrollBy(int, int)
开始的 fling(int, int)
或由触发发起的一次滚动。
void swapAdapter (Adapter adapter, boolean removeAndRecycleExistingViews)
用提供的交换机替换当前的适配器。 它类似于setAdapter(Adapter)
但假定现有适配器和新适配器使用相同的RecyclerView.ViewHolder
,并且不清除RecycledViewPool。
请注意,它仍然会调用AdapterChanged回调函数。
Parameters | |
---|---|
adapter |
Adapter : The new adapter to set, or null to set no adapter. |
removeAndRecycleExistingViews |
boolean : If set to true, RecyclerView will recycle all existing Views. If adapters have stable ids and/or you want to animate the disappearing views, you may prefer to set this to false. |
也可以看看:
boolean checkLayoutParams (ViewGroup.LayoutParams p)
Parameters | |
---|---|
p |
ViewGroup.LayoutParams
|
Returns | |
---|---|
boolean |
void dispatchRestoreInstanceState (SparseArray<Parcelable> container)
覆盖以防止适配器创建的任何视图解冻。
Parameters | |
---|---|
container |
SparseArray : The SparseArray which holds previously saved state. |
void dispatchSaveInstanceState (SparseArray<Parcelable> container)
覆盖以防止冻结由适配器创建的任何视图。
Parameters | |
---|---|
container |
SparseArray : The SparseArray in which to save the view's state. |
ViewGroup.LayoutParams generateDefaultLayoutParams ()
返回一组默认布局参数。 当传递给addView(View)
的视图没有设置布局参数时,请求这些参数。 如果返回null,则会从addView引发异常。
Returns | |
---|---|
ViewGroup.LayoutParams |
a set of default layout parameters or null |
ViewGroup.LayoutParams generateLayoutParams (ViewGroup.LayoutParams p)
根据提供的布局参数返回一组安全的布局参数。 当ViewGroup传递一个View,其布局参数不能通过checkLayoutParams(android.view.ViewGroup.LayoutParams)
的测试时,调用此方法。 此方法应该返回一组适合此ViewGroup的布局参数,可能是通过从指定的一组布局参数中复制适当的属性。
Parameters | |
---|---|
p |
ViewGroup.LayoutParams : The layout parameters to convert into a suitable set of layout parameters for this ViewGroup. |
Returns | |
---|---|
ViewGroup.LayoutParams |
an instance of ViewGroup.LayoutParams or one of its descendants |
int getChildDrawingOrder (int childCount, int i)
返回为此迭代绘制的子的索引。 如果要更改儿童的绘图顺序,请覆盖此选项。 默认情况下,它返回i。
注:为了调用此方法,您必须首先通过调用 setChildrenDrawingOrderEnabled(boolean)
来启用子订单。
Parameters | |
---|---|
childCount |
int
|
i |
int : The current iteration. |
Returns | |
---|---|
int |
The index of the child to draw this iteration. |
void onAttachedToWindow ()
这在视图附加到窗口时被调用。 此时它有一个Surface并将开始绘制。 注意这个函数保证在onDraw(android.graphics.Canvas)
之前被调用,但是它可以在第一个onDraw之前的任何时候被调用,包括在onMeasure(int, int)
之前或之后。
void onDetachedFromWindow ()
这是在视图从窗口分离时调用的。 此时它不再有绘图表面。
void onLayout (boolean changed, int l, int t, int r, int b)
当这个视图为每个孩子分配一个大小和位置时,从布局调用。 带孩子的派生类应该覆盖这个方法,并调用他们每个孩子的布局。
Parameters | |
---|---|
changed |
boolean : This is a new size or position for this view |
l |
int : Left position, relative to parent |
t |
int : Top position, relative to parent |
r |
int : Right position, relative to parent |
b |
int : Bottom position, relative to parent |
void onMeasure (int widthSpec, int heightSpec)
测量视图及其内容以确定测量宽度和测量高度。 此方法由measure(int, int)
调用, measure(int, int)
子类覆盖以提供其内容的准确和有效的度量。
合同:覆盖此方法时,您必须致电setMeasuredDimension(int, int)
来存储此视图的测量宽度和高度。 如果不这样做,将触发IllegalStateException
,由measure(int, int)
引发。 调用超类' onMeasure(int, int)
是一种有效的用法。
Measure的基类实现默认为背景大小,除非MeasureSpec允许更大的大小。 子类应覆盖onMeasure(int, int)
以提供更好的内容度量。
如果此方法被覆盖,则子类的责任是确保测量的高度和宽度至少为视图的最小高度和宽度( getSuggestedMinimumHeight()
和 getSuggestedMinimumWidth()
)。
Parameters | |
---|---|
widthSpec |
int : horizontal space requirements as imposed by the parent. The requirements are encoded with View.MeasureSpec . |
heightSpec |
int : vertical space requirements as imposed by the parent. The requirements are encoded with View.MeasureSpec . |
boolean onRequestFocusInDescendants (int direction, Rect previouslyFocusedRect)
找一个后裔打电话给requestFocus()
。 当它想要在其子女内请求焦点时由requestFocus(int, android.graphics.Rect)
调用。 重写此操作可以自定义您的ViewGroup
请求中的请求重点。
Parameters | |
---|---|
direction |
int : One of FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, and FOCUS_RIGHT |
previouslyFocusedRect |
Rect : The rectangle (in this View's coordinate system) to give a finer grained hint about where focus is coming from. May be null if there is no hint. |
Returns | |
---|---|
boolean |
Whether focus was taken. |
void onRestoreInstanceState (Parcelable state)
吊钩允许视图重新应用以前由onSaveInstanceState()
生成的内部状态的表示。 这个函数永远不会被调用为null状态。
Parameters | |
---|---|
state |
Parcelable : The frozen state that had previously been returned by onSaveInstanceState() . |
Parcelable onSaveInstanceState ()
钩子允许视图生成其内部状态的表示,稍后可用于创建具有相同状态的新实例。 此状态应仅包含不持久或以后不能重建的信息。 例如,您永远不会将当前位置存储在屏幕上,因为当视图的新实例放置在其视图层次结构中时会再次计算该位置。
您可能在此处存储的某些示例:文本视图中的当前光标位置(但通常不是文本本身,因为它存储在内容提供程序或其他永久性存储中),即当前在列表视图中选择的项目。
Returns | |
---|---|
Parcelable |
Returns a Parcelable object containing the view's current dynamic state, or null if there is nothing interesting to save. The default implementation returns null. |
void onSizeChanged (int w, int h, int oldw, int oldh)
当这个视图的大小发生变化时,这在布局期间被调用。 如果您刚刚添加到视图层次结构中,则会使用旧值0调用。
Parameters | |
---|---|
w |
int : Current width of this view. |
h |
int : Current height of this view. |
oldw |
int : Old width of this view. |
oldh |
int : Old height of this view. |
void removeDetachedView (View child, boolean animate)
完成删除分离的视图。 此方法将分派脱离窗口事件并通知层次结构更改侦听器。
这种方法的目的是轻量级的,并且不会假定父母或孩子是否应该重绘。 正确使用此方法还将包括进行任何适当的requestLayout()
或invalidate()
调用。 例如,调用者可以在post
和Runnable
执行requestLayout()
,在所有分离/移除调用完成后在下一帧执行requestLayout()
,从而导致在重新绘制视图层次结构之前运行布局。
Parameters | |
---|---|
child |
View : the child to be definitely removed from the view hierarchy |
animate |
boolean : if true and the view has an animation, the view is placed in the disappearing views list, otherwise, it is detached from the window |