給RecyclerView添加頭部

    最近開發的時候遇到一個問題,就是ScrollVIew嵌套RecyclerView的時候,在高版本的的手機上運行的時候整個頁面是可以正常滾動的,但是在低版本手機上運行的時候RecyclerView以上的內容就不會顯示出來了,整個頁面只有RecyclerVIew,並且充滿了整個屏幕,RecyclerView以上的控件居然都消失了,所以我決定把RecyclerVIew以上的佈局作爲RecyclerVIew的頭部來添加進去。

如何爲RecyclerView添加頭部?

    因爲RecyclerVIew中是沒有addHeader這樣的方法的,所以我通過RecyclerView的適配器來爲其添加頭部

    主要的思想就是把頭部佈局通過構造的方法傳遞到適配器中

public class HomeArticleAdapter extends RecyclerView.Adapter<HomeArticleAdapter.MyViewHolder> {
    private List<HomeArticleBean.ItemsBean> list = new ArrayList<>();
    private Context context;
    private View mHeadView;
    private double mWindowHeight;
    private double mWindowHeightSize;

    public HomeArticleAdapter(Context context) {
        this.context = context;
        //獲取屏幕的高度
        mWindowHeight = ((Activity) context).getWindowManager().getDefaultDisplay().getHeight();
        mWindowHeightSize = mWindowHeight * 0.12;
        mWindowHeight = mWindowHeight * 0.86;
    }
    
    //頭部的set方法
    public void setHeadView(View headView) {
        mHeadView = headView;
    }

    public void setList(List<HomeArticleBean.ItemsBean> list) {
        this.list = list;
        notifyDataSetChanged();
    }


    @NonNull
    @Override
    public HomeArticleAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {

        View view = View.inflate(context, R.layout.adapter_item_home_article, null);
        MyViewHolder viewHolder = new MyViewHolder(view);
        return viewHolder;
    }


    @Override
    public void onBindViewHolder(@NonNull HomeArticleAdapter.MyViewHolder myViewHolder, final int i) {
        //爲recyclerwei條目賦值(其他操作)

        LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)                         
        myViewHolder.mHeadLayout.getLayoutParams();
        //判斷是否是第0條
        if (i == 0) {
            //如果是的話給RecyclerView添加頭部
            myViewHolder.mHeadLayout.removeAllViews();
            myViewHolder.mHeadLayout.addView(mHeadView);
            params.height = (int) mWindowHeight;
            params.bottomMargin = (int) -mWindowHeightSize;
        } else {
            //如果不是的話讓頭部的高度爲0
            params.height = 0;
        }
        myViewHolder.mHeadLayout.setLayoutParams(params);
       
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    public class MyViewHolder extends RecyclerView.ViewHolder {
        private RelativeLayout mHeadLayout;

        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            itemView.findViewById(R.id.adapter_item_homehead_layout);
           
        }
    }

   

}

不難看出,在適配中我把頭部的佈局放在了RecyclerVIew的條目的佈局中,也就是讓這個佈局充當RecyclerView的第一條,如果不是第一條的話就讓這個佈局的高度爲0。因爲我用的是百分比適配,所以高是計算出來的。

主要注意的也就是把你想用的頭部放到RecyclerView條目的佈局中,判斷是否是第一條來改變頭部佈局的高度。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章