我正在使用项目中的所有Android体系结构组件(Room DB,Live Data等)。目前,我遇到一个问题,即我拥有RecyclerView,该处理器应使用从Room DB加载的数据并将其与Paging库一起显示。问题是存在多个数据类,这些数据类表示新闻源中的项目并存储在Room中,我需要在一个回收站中显示它们。
有什么办法可以轻松解决吗?例如,我可以创建一个所有这些类都可以使用的接口吗?
答案 0 :(得分:1)
您可以通过重写RecyclerView.Adapter的getItemViewType()方法来提供多个View持有者列表。
代码段
@Override
public int getItemViewType(int position) {
// Just as an example, return 0 or 2 depending on position
// Note that unlike in ListView adapters, types don't have to be contiguous
return position % 2 * 2;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case 0: return new ViewHolder0(...);
case 2: return new ViewHolder2(...);
...
}
}
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
switch (holder.getItemViewType()) {
case 0:
ViewHolder0 viewHolder0 = (ViewHolder0)holder;
...
break;
case 2:
ViewHolder2 viewHolder2 = (ViewHolder2)holder;
...
break;
}
}
有关更多详细信息,请参见this链接。
答案 1 :(得分:0)
您可以创建并进行交互
public interface NeewsFeedItem
String getTitle();
int getType();
String data();
...
每个模型implement NeewsFeedItem
都在适配器内部,您决定要显示哪种视图类型以及如何显示正确的NeewsFeedItem
。
您可以覆盖getItemViewType以针对不同的NeewsFeed类型显示不同的演示。
您还可以检查FlexibleAdapter库,该库可以帮助管理具有不同类型,页眉,页脚等的适配器。
答案 2 :(得分:0)
我想将标题添加到recyclerView。第一个位置不能使用其他项目类型,因为重新加载项目后的库导致recyclerview向下滚动到列表底部。
我创建了ViewHolder,其中包含我的常规列表项和标题。这样我的常规项目位于标题为0的位置上,因为第一个项目也是分页项目,库也停止滚动到recyclerView的底部。