android 给多列的RecycleView添加头布局

来源:互联网 发布:cfd软件 编辑:程序博客网 时间:2024/05/20 10:21

在工作中遇到商城类的界面,界面上半部分是viewpager,下部分是多列的GridView,具体实现:


1、在设置RecycleView的manager时使用GridlayoutManager的

setSpanSizeLookup属性设置头布局所占的宽度:
manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {    @Override    public int getSpanSize(int position) {        if (position == 0) {            return 头布局所占的个数;        } else {            return 1;        }    }});
在Adapter中给RecycleView.Adapter设置一个setHeadView()方法,在adapter中接收头布局,然后在判断条目的类型时如果是头的话,就直接将view添加进去,如果是正常的条目,就按正常的加。
具体代码:
GridLayoutManager manager = new GridLayoutManager(getContext(), 2);manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {    @Override    public int getSpanSize(int position) {        if (position == 0) {            return 3;        } else {            return 1;        }    }});manager.setOrientation(LinearLayoutManager.VERTICAL);recycleview.setLayoutManager(manager);mAdapter = new MyRecycleAdapter(getContext(), list);//        headView = View.inflate(getContext(), R.layout.shop_head, null);headView = new Recycle(getContext());//设置轮播图的图片headView.setImages(images);//        initHeadView();mAdapter.addHeadView(headView);recycleview.setAdapter(mAdapter);

adapter代码:
public class MyRecycleAdapter extends RecyclerView.Adapter<MyRecycleAdapterHolder> {    private View    headView;    private Context mContext;    private List<String> count;    public MyRecycleAdapter(Context mContext, List<String> list ) {        this.count = list;        this.mContext = mContext;    }    /**     * 设置数据源总的条目     */    @Override    public int getItemCount() {        //返回条目数加头布局个数        return count==null? 2:count.size()+2;    }    @Override    public void onBindViewHolder(MyRecycleAdapterHolder holder,                                 final int position) {        int itemViewType = getItemViewType(position);        // 头部        if (itemViewType == ShopFragment.HEADER_RECYCLER_VIEW_ITEM) {            return;        } else if (itemViewType == ShopFragment.NORMAL_RECYCLER_VIEW_ITEM) {//普通条目            /*holder.iv_add.setOnClickListener(new OnClickListener() {                @Override                public void onClick(View v) {                    Toast.makeText(mContext, "添加购物车", Toast.LENGTH_SHORT).show();                    if (mOnImageClickListener != null) {                        mOnImageClickListener.onClick();                    }                }            });*/            holder.pic.setOnClickListener(new OnClickListener() {                @Override                public void onClick(View view) {                    Intent intent = new Intent(mContext, ShowActivity.class);                    Bundle bundle = new Bundle();                    bundle.putInt("Item", i);                    intent.putExtra("fragment", DetailFragment.class);                    mContext.startActivity(intent);                }            });        }    }    @Override    public MyRecycleAdapterHolder onCreateViewHolder(ViewGroup parent, int viewType) {        View root = null;        if (viewType == ShopFragment.HEADER_RECYCLER_VIEW_ITEM) {            root = headView;        } else {            root = LayoutInflater.from(mContext).inflate(R.layout.shop_item_adapter, parent,                    false);        }        return new MyRecycleAdapterHolder(root, viewType);    }    /**     * 添加自定义头部     */    public void addHeadView(View view) {        this.headView = view;    }    @Override    public int getItemViewType(int position) {        if (position == 0) {            return ShopFragment.HEADER_RECYCLER_VIEW_ITEM;        } else {            return ShopFragment.NORMAL_RECYCLER_VIEW_ITEM;        }    }    private OnImageClickListener mOnImageClickListener;    public void setOnItemClickListener(OnImageClickListener listener) {        mOnImageClickListener = listener;    }    public interface OnImageClickListener {        void onClick();    }}

0 0
原创粉丝点击