- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我为使用 GridLayoutManager
的 RecyclerView
创建了自定义 ItemDecoration
。 ItemDecoration
本质上确保在 RecyclerView
中应用所有 subview 之间的等效间距:
ItemDecoration
完全按照我希望的方式工作,我认为它看起来很棒。但是,我注意到在为我的 RecyclerView
设置布局管理器之前,我需要添加 ItemDecoration
。我的主要问题是:这是为什么?
我正在处理一些遗留代码,这些代码使用 CursorLoader
从网络中提取 RSS 提要并将它们显示给最终用户。无论出于何种原因,布局管理器都在 onLoadFinished()
中设置:
@Override
public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) {
Adapter adapter = new Adapter(cursor);
adapter.setHasStableIds(true);
mRecyclerView.setAdapter(adapter);
GridLayoutManager gridLayoutManager =
new GridLayoutManager(this, mColumnCount, GridLayoutManager.VERTICAL, false);
mRecyclerView.setLayoutManager(gridLayoutManager);
}
我注意到,如果我在 onLoadFinished()
中添加我的 ItemDecoration
,项目之间的边距看起来比实际应该的要大:
@Override
public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) {
Adapter adapter = new Adapter(cursor);
adapter.setHasStableIds(true);
mRecyclerView.setAdapter(adapter);
GridLayoutManager gridLayoutManager =
new GridLayoutManager(this, mColumnCount, GridLayoutManager.VERTICAL, false);
mRecyclerView.setLayoutManager(gridLayoutManager);
// Adding the custom ItemDecoration
EqualOffsetItemDecoration itemDecoration = new EqualOffsetItemDecoration(this, R.dimen.card_view_margin, mColumnCount);
mRecyclerView.addItemDecoration(itemDecoration);
}
上面的屏幕截图显示的边距比我预期的要多得多,因为我只应用了 8dps(card_view_margin
的值)。但是,如果我在 onCreate()
中添加 ItemDecoration
,那么它会按预期显示:
@Override
protected void onCreate(Bundle savedInstanceState) {
...
mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
mColumnCount = getResources().getInteger(R.integer.list_column_count);
/*
In order to have equal spacing along the edges of the screen as well as between the
child views of the RecyclerView, an EqualOffsetItemDecoration is applied to the RecyclerView.
*/
EqualOffsetItemDecoration itemDecoration = new EqualOffsetItemDecoration(this, R.dimen.card_view_margin, mColumnCount);
mRecyclerView.addItemDecoration(itemDecoration);
...
}
...第一个屏幕截图就是这种情况。那么为什么这很重要呢?为什么我需要在将布局管理器应用到我的 RecyclerView
之前添加 ItemDecoration
?我确信这与幕后执行的顺序有关。非常感谢任何类型的解释:)
仅供引用,以防有人对我如何创建 ItemDecoration
感兴趣,这里是:
最佳答案
有趣的问题,但我认为在项目装饰之前或之后设置布局管理器并不重要。这两个调用都会导致布局请求。
我猜测您不止一次向 RecyclerView
添加装饰。由于装饰复合,您会看到装饰添加两次(或更多次)而不是一次的更大差距。
关于android - LayoutManager 之前的 ItemDecoration?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48968085/
我正在尝试为 recyclerView 中的每个 ViewHolder 创建多个垂直分隔线,但不知道如何。 这是我工作水平分隔线的代码: @Override public void onDrawOve
我写了一个小 fragment 来在 RecyclerView 的每个项目中显示一条垂直线和一个小球。但是最后一个或只有 1 个项目时永远不会被绘制。 我的装饰: public class Marke
我刚刚开始使用 ItemDecoration。我正在尝试在由 StaggeredGridLayoutManager 管理的两列 RecyclerView 中间实现分隔线。 这是我的 ItemDecor
这是我的第一个堆栈溢出问题。在过去的几个小时里,我一直在试图找到解决这个堆栈溢出问题的方法,但我找不到任何东西。 我在这里创建的应用程序(或特定 Activity )非常简单,基本上是一个包含 Tex
我为使用 GridLayoutManager 的 RecyclerView 创建了自定义 ItemDecoration。 ItemDecoration 本质上确保在 RecyclerView 中应用所
我想知道如何添加item装饰使所有item之间的间距相等,并控制每个外部空间是否有空间 所需的效果: 只留下空格和中间的相等空格: 没有边缘空间,中间有相等的空间: 最佳答案 import andro
我正在使用具有不同 viewholders 的 recyclerview(具有垂直 LinearLayout),其中一个有另一个 RecyclerView(带有水平 LL)。在第二个 recycler
我想为 Header Type 绘制一个默认的 ItemDecoration 到 RecycleView 中。但是 divider 是为每个 ViewType 显示的。 自定义装饰: class Di
我有一个带有 2 个 ItemDecorations 的 RecyclerView。我如何指定每个 ItemDecoration 的高度(z-index),以设置将绘制在另一个之上? 最佳答案 来自d
我使用这个 timehop stickyheader 库为我的 recyclerview 创建粘性 header :https://github.com/timehop/sticky-header
我正在使用 RecyclerView.ItemDecoration类在列表中创建分隔线,但我想隐藏列表中最后一项的分隔线。这是否可能无需自己实现分隔线? 最佳答案 你可以试试这个, public cl
我已经知道如何在 ItemDecoration 中绘制东西,但现在我想在 ItemDecoration 中绘制一个 View。 由于设置有点复杂,我创建了一个sample project可以重现问题。
我通过覆盖 getItemOffsets() 方法(请参阅下面的代码)使用 GridLayoutManager 为我的 RecyclerView 应用相等的边距。 但是,当一个对象从适配器中移除时,移
我有一个 RecyclerView(带有 LinearLayoutManager)和一个自定义的 RecyclerView.ItemDecoration。 比方说,我想在装饰 View 中添加按钮(出
我为 RecyclerView 编写了两个 ItemDecorator。每个都在 getItemOffsets() 中添加一些顶部偏移量。比方说: 第一个装饰器添加 20dp 顶部偏移 第二个 dec
我正在为我的 recyclerview 使用自定义项目装饰器,它工作正常。 MyItemDecorationTest.java public class MyItemDecorationTest ex
这是我的场景 我必须在回收器 View 的第一个和最后一个项目上添加空间 我正在使用 ItemDecoration recyclerView.addItemDecoration(new Recycl
我正在尝试使用ItemDecorator将一些分隔符添加到 RecyclerView 中。这是执行此操作的代码 fragment 。 //... public abstract C onInflate
我有一个像这样的简单 RecyclerView: 我在 Fragment 的 onCreate() 方法中添加分隔符: mRv = (RecyclerView) view.findVie
我正在我的应用程序中创建一个显示多个用户之间对话的消息传递功能。对于用户拥有的消息,我希望头像图像右对齐,而对于其他消息,我希望头像左对齐。 为了实现这一点,我在 framelayout 和 onBi
我是一名优秀的程序员,十分优秀!