- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用ItemDecorator
将一些分隔符添加到 RecyclerView
中。这是执行此操作的代码 fragment 。
//...
public abstract C onInflateViewHolder(Context ctx);
public abstract void onBindViewHolder(C holder, int index);
@Override
public void onDraw(Canvas c, RecyclerView parent) {
if (mOrientation == VERTICAL_LIST) {
drawVertical(c, parent);
} else {
drawHorizontal(c, parent);
}
}
public void drawVertical(Canvas c, RecyclerView parent) {
final int left = parent.getPaddingLeft();
final int right = parent.getWidth() - parent.getPaddingRight();
for (int i = 0; i < parent.getChildCount(); i++) {
C view = onInflateViewHolder(mContext);
onBindViewHolder(view, i);
RelativeLayout.LayoutParams p = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
//parent.addView(view.itemView, i, p);
view.itemView.draw(c);
}
}
//...
正如你所看到的,我尝试使用 parent.addView(view.itemView, i, p);
, parent.addView(view.itemView, i);
最后view.itemView.draw(c);
.
这是实现:
mItemDecorator =
new GenericDecorator<ChatDateSeparatorViewHolder>(getActivity(), GenericDecorator.VERTICAL_LIST) {
@Override
public ChatDateSeparatorViewHolder onInflateViewHolder(Context ctx) {
View v = LayoutInflater.from(ctx).inflate(R.layout.chat_message_separator, null);
return new ChatDateSeparatorViewHolder(v);
}
@Override
public void onBindViewHolder(ChatDateSeparatorViewHolder holder, int index) {
if (index < mAdapter.getItemCount()-1) {
ChatMessage previous = mAdapter.getMessage(index);
ChatMessage current = mAdapter.getMessage(index+1);
long startTime = previous.getSendDate().getTime();
long endTime = current.getSendDate().getTime();
long diffTime = endTime - startTime;
long diffDays = diffTime / (1000 * 60 * 60 * 24);
if (diffDays > 0) {
holder.text.setText(Converters.format(current.getSendDate(), getActivity()));
} else {
holder.root.setVisibility(View.GONE);
}
} else {
holder.root.setVisibility(View.GONE);
}
}
};
顺便说一下,C 是 Recycler.ViewHolder
,正如您在实现中所看到的。
一切似乎都很好,但在尝试添加 View 时它崩溃了。我确实得到的异常(exception)是 NullpointerException
当我将 addView 与 LayoutParams 广告 at android.support.v7.widget.RecyclerView$LayoutParams.getViewPosition(RecyclerView.java:6957)
一起使用时
我只需要知道如何以编程方式添加 View
进入RecyclerView
无需使用适配器。
编辑:
我正在尝试在 RecyclerView
中添加分隔符,这个分隔符将是我从 ViewHolder
获得的 View ,一切都完成了,我唯一需要知道的是如何以编程方式将 View (我从 ViewHolder
获得)添加到 RecyclerView
中
这是应用程序模型的屏幕截图,因此您会有更好的想法:
“Hoy”(今天的西类牙语)这一行是分隔符之一。
最佳答案
您可以使用项目View's
标签来执行此操作
在 Adapter 的
onBindViewHolder 中,您可以确定这是否是当天的最后一条消息。如果这是当天的最后一条消息,那么您可以调用类似 holder.itemView.setTag("isLastForDay")
的内容。
然后在装饰器中,在循环 RecyclerView 的
子级时,读取每个子级的标签。如果标签包含“isLastForDay”,则执行您的“hoy”绘图逻辑。
关于java - 使用 ItemDecorator 在 RecyclerView 中制作分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26864092/
我正在尝试为 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
我是一名优秀的程序员,十分优秀!