1. 程式人生 > >android 給多列的RecycleView新增頭佈局

android 給多列的RecycleView新增頭佈局

在工作中遇到商城類的介面,介面上半部分是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();
    }

}

程式碼中定義尺寸
businessRecycler.addItemDecoration(new GridSpacingItemDecoration(4, getResources().getDimensionPixelSize(R.dimen.y4), true));
getResources().getDimensionPixelSize(R.dimen.y4)
是資原始檔裡的尺寸