为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用多种视图类型创建RecyclerView?

如何使用多种视图类型创建RecyclerView?

心有法竹 2019-05-24 14:53:14
如何使用多种视图类型创建RecyclerView?当我们创建时,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使用多种视图类型进行创建?
查看完整描述

4 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

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

所以你做的事情如下:

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


查看完整回答
反对 回复 2019-05-24
  • 4 回答
  • 0 关注
  • 644 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信