我正在尝试使用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/