RecyclerView展示不同的视图类型

18

我正在使用RecyclerView来显示列表。我想知道如何显示不同类型的视图?也就是说,在同一个适配器中使用不同的ViewHolders

在简单的ListView中,我们使用getItemViewType(),在RecyclerView中有什么不同吗?


可能是如何创建具有多个视图类型的RecyclerView?的重复问题。 - Ashok Varma
2个回答

38

要创建多种视图类型的RecyclerView,只需实现getItemViewType()方法,使用两个不同的ViewHolder并注意在onCreateViewHolder()bindViewHolder()中处理viewType参数。

简单示例:

public class MultipleViewTypesAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

    private static final int VIEW_TYPE_FIRST  = 0;
    private static final int VIEW_TYPE_SECOND = 1;

    class ViewHolderFirst extends RecyclerView.ViewHolder {
        ...
    }

    class ViewHolderSecond extends RecyclerView.ViewHolder {
        ...
    }

    @Override
    int getItemViewType(int position) {
        return position % 2;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        switch (viewType) {
            case VIEW_TYPE_FIRST: return new ViewHolderFirst(...);
            case VIEW_TYPE_SECOND: return new ViewHolderSecond(...);
            ...
        }
    }

    @Override
    public void bindViewHolder(RecyclerView.ViewHolder holder, int position) {
        switch (getItemViewType(position)) {
            case VIEW_TYPE_FIRST:
                ViewHolderFirst viewHolderFirst = (ViewHolderFirst)holder;
                ...
                break;
            case VIEW_TYPE_SECOND:
                ViewHolderSecond viewHolderSecond = (ViewHolderSecond)holder;
                ...
                break;
            ...
        }
    }
}

在onCreateViewHolder中的默认情况下,您会返回什么? - Gokhan Arik
@GokhanArik 你来决定吧。我认为最好的选择是返回空适配器,因为用于填充适配器的列表可能为空。 - joninx
当没有内容可显示时,Google建议您展示图像或有用的文本。了解更多详细信息,请参考Material Design规范中关于空状态的内容。 - Chad Mx

-2

在gradle中添加以下代码:

compile 'com.firebaseui:firebase-ui-database:1.0.1'

compile 'com.firebaseui:firebase-ui-storage:1.0.1'


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