Android RecyclerView 实现ListView GridView混排

这里写图片描述

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

猜你喜欢

转载自blog.csdn.net/u010259369/article/details/52858990