Android给RecyclerView添加头(Header)和尾(Footer)和分标题(Title)——最简单的两种方法
给RecyclerView添加头和尾的方法很多,这里写两种最简单的方法。
1.控制布局 显隐
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="30dp" android:gravity="center" android:visibility="gone" android:text="这是子标题栏"/> <LinearLayout android:layout_width="match_parent" android:layout_height="50dp"> <ImageView android:layout_width="50dp" android:layout_height="50dp" android:background="@mipmap/ic_launcher" /> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:text="我心飞翔" /> </LinearLayout> </LinearLayout>
这里把上面那个TextView作为标题栏,只不过是隐藏的(android:visibility="gone"),当你想要加载的时候,把他设置为visible即可
代码
int i = 0; @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false); ViewHolder holder = new ViewHolder(view); i++; // 方法1 if (i == 5) { ViewGroup vg = (ViewGroup) holder.itemView; TextView v = (TextView) vg.getChildAt(0); v.setVisibility(View.VISIBLE); v.setText("A"); v.setTextColor(Color.RED); } if (i == 10) { ViewGroup vg = (ViewGroup) holder.itemView; TextView v = (TextView) vg.getChildAt(0); v.setVisibility(View.VISIBLE); v.setText("B"); v.setTextColor(Color.RED); }因为这个oncreateViewHolder会执行很多很多次,对应item的个数。所以我们选择在i=5的时候,和10的时候,添加了标题。
效果图
方法2
可以不用对布局进行添加这么一个隐藏的选项,直接新建一个textview添加进去即可,不过要添加布局参数
if (i == 5) { ViewGroup vg = (ViewGroup) holder.itemView; TextView tv = new TextView(mContext); tv.setText("A"); tv.setTextColor(Color.RED); tv.setGravity(Gravity.CENTER);//文字居中 LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT ); vg.addView(tv, lp); }
效果图
全部代码
package com.hdu.a15058124.homework3; import android.content.Context; import android.graphics.Color; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import static android.R.id.list; import static android.content.ContentValues.TAG; public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> { static class ViewHolder extends RecyclerView.ViewHolder { public ViewHolder(View view) { super(view); } } Context mContext = null; public Adapter(Context c) { mContext = c; } int i = 0; @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false); ViewHolder holder = new ViewHolder(view); i++; // 方法1 // if (i == 5) { // ViewGroup vg = (ViewGroup) holder.itemView; // TextView v = (TextView) vg.getChildAt(0); // // v.setVisibility(View.VISIBLE); // // v.setText("A"); // v.setTextColor(Color.RED); // } // // if (i == 10) { // ViewGroup vg = (ViewGroup) holder.itemView; // TextView v = (TextView) vg.getChildAt(0); // // v.setVisibility(View.VISIBLE); // // v.setText("B"); // v.setTextColor(Color.RED); // } if (i == 5) { ViewGroup vg = (ViewGroup) holder.itemView; TextView tv = new TextView(mContext); tv.setText("A"); tv.setTextColor(Color.RED); tv.setGravity(Gravity.CENTER); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT ); vg.addView(tv, lp); } return holder; } //绑定数据 @Override public void onBindViewHolder(ViewHolder holder, int position) { } @Override public int getItemCount() { return 30; } }
请注意:以这种形式添加的分标题是依附于某一个item的,如果那个item被删了,这个分标题也无疑会被删了。所以更好的做法就是当i=5的时候,不用inflater的方法去加载view给holder,而是自己new出textview给holder,单独成立一个item。