给RecyclerView添加头部

    最近开发的时候遇到一个问题,就是ScrollVIew嵌套RecyclerView的时候,在高版本的的手机上运行的时候整个页面是可以正常滚动的,但是在低版本手机上运行的时候RecyclerView以上的内容就不会显示出来了,整个页面只有RecyclerVIew,并且充满了整个屏幕,RecyclerView以上的控件居然都消失了,所以我决定把RecyclerVIew以上的布局作为RecyclerVIew的头部来添加进去。

如何为RecyclerView添加头部?

    因为RecyclerVIew中是没有addHeader这样的方法的,所以我通过RecyclerView的适配器来为其添加头部

    主要的思想就是把头部布局通过构造的方法传递到适配器中

public class HomeArticleAdapter extends RecyclerView.Adapter {
    private List 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 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条目的布局中,判断是否是第一条来改变头部布局的高度。

你可能感兴趣的:(Android)