100开始:

当我们创建一个RecyclerView.Adapter时,我们必须指定将与适配器绑定的ViewHolder.

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

    private String[] mDataset;

    public MyAdapter(String[] myDataset) {
        mDataset = myDataset;
    }

    public static class ViewHolder extends RecyclerView.ViewHolder {
        public TextView mTextView;
        public ViewHolder(TextView v) {
            super(v);
            mTextView = v;
        }
    }

    @Override
    public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.some_layout, parent, false);

        //findViewById...

        ViewHolder vh = new ViewHolder(v);
        return vh;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        holder.mTextView.setText(mDataset[position]);
    }

    @Override
    public int getItemCount() {
        return mDataset.length;
    }
}

是否可以创建具有多种视图类型的RecyclerView个视图?

推荐答案

是的,有可能.只需实现getItemViewType(),并处理onCreateViewHolder()中的viewType参数.

因此,您可以这样做:

public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    class ViewHolder0 extends RecyclerView.ViewHolder {
        ...
        public ViewHolder0(View itemView){
        ...
        }
    }

    class ViewHolder2 extends RecyclerView.ViewHolder {
        ...
        public ViewHolder2(View itemView){
        ...
    }

    @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;
        }
    }
}

Java相关问答推荐

Gmail Javi API批量处理太多请求

如何使用jooq generator将表名和列名映射为人类可读的?

Jlink选项&-strie-ative-Commands";的作用是什么?

如何在ApachePOI中将图像添加到工作表的页眉?

有没有更快的方法在N个容器中删除重复项?

带有Health Check的Spring Boot BuildPack打破了本机映像构建过程

使用Jackson库反序列化json

SpringBoot:在条件{Variable}.isBlank/{Variable}.isEmpty不起作用的情况下进行路径变量验证

Android应用程序为错误的显示类型 Select 尺寸文件

深度优先搜索实现:算法只向右搜索

为什么我不能建立输入/输出流?Java ServerSocket

如何从命令行编译包中的所有类?

在Java中将.GRF转换为图像文件

如何对存储为字符串的大数字数组进行排序?

如何在右击时 Select 新行?

在WHILE()循环初始化部分中声明和初始化变量的Java语法?

使用同步方法中的新线程调用同步方法

为什么Instant没有从UTC转换为PostgreSQL的时区?

PhantomReference无法访问时会发生什么?

Java编译器是否进行了持续的折叠优化,以及如何进行判断?