Android RecyclerView 实现ListView GridView混排

来源:互联网 发布:高考文言文阅读 知乎 编辑:程序博客网 时间:2024/05/05 16:16

这里写图片描述

1、Adapter中定义不同Item类型,复写getItemViewType方法
2、在onCreateViewHolder中根据viewType返回不同的ViewHolder
3、onBindViewHolder根据不同ViewHolder渲染内容
4、Activity中定义GridLayoutManager
5、复写GridLayoutManager.setSpanSizeLookup。

关键代码
Adapter

public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {    public static final int TYPE_LIST = 0, TYPE_GRID = 1;    private LayoutInflater inflater;    private List<String> datas = new ArrayList<>();    public MyAdapter(Context context) {        inflater = LayoutInflater.from(context);        String[] array = {"a", "a", "a", "a", "a", "a", "a", "a", "a", "a"};        datas.addAll(Arrays.asList(array));    }    @Override    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        if (viewType == TYPE_LIST) {            View view = inflater.inflate(R.layout.item_listview, parent, false);            ViewHolderList viewHolder = new ViewHolderList(view);            viewHolder.textView = (TextView) view.findViewById(R.id.tv);            return viewHolder;        } else {            View view = inflater.inflate(R.layout.item_gridview, parent, false);            ViewHolderGrid viewHolder = new ViewHolderGrid(view);            viewHolder.imageView = (ImageView) view.findViewById(R.id.iv_grid);            return viewHolder;        }    }    @Override    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {        if (holder instanceof ViewHolderList) {            ViewHolderList viewHolder = (ViewHolderList) holder;            viewHolder.textView.setText(datas.get(position));        } else {        }    }    @Override    public int getItemCount() {        return datas.size();    }    @Override    public int getItemViewType(int position) {        return position < 5 ? TYPE_LIST : TYPE_GRID;    }    class ViewHolderList extends RecyclerView.ViewHolder {        private TextView textView;        public ViewHolderList(View itemView) {            super(itemView);        }    }    class ViewHolderGrid extends RecyclerView.ViewHolder {        private ImageView imageView;        public ViewHolderGrid(View itemView) {            super(itemView);        }    }}

Activity代码:

 mRecyclerView = (RecyclerView) findViewById(R.id.recycler);        adapter = new MyAdapter(this);        GridLayoutManager layoutManager = new GridLayoutManager(this, 2);        layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {            @Override            public int getSpanSize(int position) {                switch (adapter.getItemViewType(position)) {                    case MyAdapter.TYPE_LIST:                        return 2;                    case MyAdapter.TYPE_GRID:                        return 1;                    default:                        return -1;                }            }        });        mRecyclerView.setLayoutManager(layoutManager);        mRecyclerView.setAdapter(adapter);
0 0
原创粉丝点击