分页库 - 单个回收站具有多个视图类型

7
我在我的项目中使用所有的Android架构组件(如Room DB、Live Data等)。目前,我遇到了一个问题:我有一个RecyclerView,它应该从Room DB中加载数据,并使用Paging库显示它。问题是有多个数据类代表新闻源中的项,并存储在Room中,我需要在一个RecyclerView中显示它们。
有什么简单的方法可以解决这个问题吗?例如,我是否可以创建一个接口,让所有这些类都使用它?
3个回答

2
你可以创建一个界面。
public interface NeewsFeedItem
    String getTitle();
    int getType();
    String data();
...

每个模型都实现了 `NeewsFeedItem`,在适配器内部决定显示何种类型的视图以及如何显示正确的 `NeewsFeedItem`。
你可以重写 getItemViewType 来展示不同 `NeewsFeed` 类型的不同样式。
此外,你还可以检查 FlexibleAdapter 库,它可以帮助你管理具有不同类型、标题、页脚等的适配器。

1
你可以通过重写 RecyclerView.Adapter 的 getItemViewType() 方法,为列表提供多个视图持有者。 代码片段
  @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链接。


0

我想在recyclerView中添加标题。但是第一个位置不能有不同的项目类型,因为在重新加载项目后,库会导致recyclerview滚动到列表底部。

我创建了ViewHolder,它包含我的常规列表项和标题。这样,我的常规项目与标题位于位置0,库停止将recyclerView滚动到底部,因为第一项也是分页项。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接