分页库 - 一个具有多种视图类型的回收器
Paging library - one recycler with multiple view types
我在我的项目中使用了所有 Android 架构组件(Room DB、实时数据等)。目前,我面临一个问题,我有 RecyclerView,它应该使用从 Room DB 加载的数据并显示它与分页库。问题是有多个数据 类 表示新闻源中的项目并存储在 Room 中,我需要在那个回收站中显示它们。
有什么方法可以轻松解决吗?例如,我可以创建一些接口供所有这些 类 使用吗?
您可以创建和连接
public interface NeewsFeedItem
String getTitle();
int getType();
String data();
...
您的每个模型 implement NeewsFeedItem
和在您的 Adapter 内部,您决定显示什么类型的视图以及如何显示正确的 NeewsFeedItem
。
您可以覆盖 getItemViewType 以针对不同的 NeewsFeed 类型显示不同的呈现方式。
您还可以查看 FlexibleAdapter 库,它可以帮助管理具有不同类型、页眉、页脚等的适配器。
我想将 header 添加到 recyclerView。第一个位置不能有不同的项目类型,因为重新加载项目后的库导致 recyclerview 一直向下滚动到列表底部。
我创建了 ViewHolder 来保存我的常规列表项和我的 header。这样我的常规项目就在位置 0 header,库停止滚动到 recyclerView 的底部,因为第一个项目也是分页的项目。
您可以通过覆盖 RecyclerView.Adapter 的 getItemViewType() 方法来提供多个 View holder 以列出。
代码段
@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 link.
我在我的项目中使用了所有 Android 架构组件(Room DB、实时数据等)。目前,我面临一个问题,我有 RecyclerView,它应该使用从 Room DB 加载的数据并显示它与分页库。问题是有多个数据 类 表示新闻源中的项目并存储在 Room 中,我需要在那个回收站中显示它们。
有什么方法可以轻松解决吗?例如,我可以创建一些接口供所有这些 类 使用吗?
您可以创建和连接
public interface NeewsFeedItem
String getTitle();
int getType();
String data();
...
您的每个模型 implement NeewsFeedItem
和在您的 Adapter 内部,您决定显示什么类型的视图以及如何显示正确的 NeewsFeedItem
。
您可以覆盖 getItemViewType 以针对不同的 NeewsFeed 类型显示不同的呈现方式。
您还可以查看 FlexibleAdapter 库,它可以帮助管理具有不同类型、页眉、页脚等的适配器。
我想将 header 添加到 recyclerView。第一个位置不能有不同的项目类型,因为重新加载项目后的库导致 recyclerview 一直向下滚动到列表底部。
我创建了 ViewHolder 来保存我的常规列表项和我的 header。这样我的常规项目就在位置 0 header,库停止滚动到 recyclerView 的底部,因为第一个项目也是分页的项目。
您可以通过覆盖 RecyclerView.Adapter 的 getItemViewType() 方法来提供多个 View holder 以列出。
代码段
@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 link.