最近開發的時候遇到一個問題,就是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條目的佈局中,判斷是否是第一條來改變頭部佈局的高度。