分页库-具有多种视图类型的一个回收站

时间:2018-08-06 08:28:51

标签: android android-recyclerview android-room android-architecture-components android-jetpack

我正在使用项目中的所有Android体系结构组件(Room DB,Live Data等)。目前,我遇到一个问题,即我拥有RecyclerView,该处理器应使用从Room DB加载的数据并将其与Paging库一起显示。问题是存在多个数据类,这些数据类表示新闻源中的项目并存储在Room中,我需要在一个回收站中显示它们。

有什么办法可以轻松解决吗?例如,我可以创建一个所有这些类都可以使用的接口吗?

3 个答案:

答案 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的底部。

相关问题