1. 程式人生 > >Android 為RecyclerView新增HeaderView和FooterView

Android 為RecyclerView新增HeaderView和FooterView

對於新增headerView或者footerView

其實HeaderView實際上也是Item的一種,只不過顯示在頂部的位置,那麼我們完全可以通過為其設定ItemType來完成。

有了思路以後,接下來考慮一些細節。

介面卡
public class TimeTablesAdapter extends RecyclerView.Adapter<TimeTablesAdapter.ViewHolder> {
public static final int TYPE_HEADER = 0; //帶有Header
public static final int TYPE_FOOTER = 1; //帶有Footer
public static final int TYPE_NORMAL = 2; //不帶有header和footer List<TimetablesBean> listData; private LayoutInflater inflater; private Context mContext; /** * HeaderView, FooterView */ private View mHeaderView; private View mFooterView; public TimeTablesAdapter(Context context) {
mContext = context; this.inflater = LayoutInflater.from(mContext); } public void setListData(List<TimetablesBean> listData) { this.listData = listData; } protected View getHeaderView() { return mHeaderView; } public void setHeaderView(View headerView) { mHeaderView = headerView; }
public View getFooterView() { return mFooterView;
} protected void setFooterView(View footerView) { mFooterView = footerView; }
onCreateViewHolder
 @Override
public TimeTablesAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//        return new ViewHolder(inflater.inflate(R.layout.activity_timetables_patternc, parent, false));
if (mHeaderView != null && viewType == TYPE_HEADER) {
return new ViewHolder(mHeaderView);
        }
if (mFooterView != null && viewType == TYPE_FOOTER) {
return new ViewHolder(mFooterView);
        }
View layout = inflater.inflate(R.layout.activity_timetables_patternc, parent, false);
        return new ViewHolder(layout);

    }
onBindViewHolder
@Override
public void onBindViewHolder(TimeTablesAdapter.ViewHolder holder, int position) {
if (getItemViewType(position) == TYPE_NORMAL) {
if (holder instanceof ViewHolder) { //這裡載入資料的時候要注意,是從position-1開始,因為position==0已經被header佔用了
holder.mClassTitle.setText("10:30-10:30 鋼琴室");
            return;
        }
return;
    } else if (getItemViewType(position) == TYPE_HEADER) {
holder.mTotalSchedule.setText("12");
        return;
    } else {
return;
    }
}
getItemCount
@Override
public int getItemCount() {
if (mHeaderView == null && mFooterView == null) {
return listData.size();
    } else if (mHeaderView == null && mFooterView != null) {
return listData.size() + 1;
    } else if (mHeaderView != null && mFooterView == null) {
return listData.size() + 1;
    } else {
return listData.size() + 2;
    }
}
ViewHolder
class ViewHolder extends RecyclerView.ViewHolder {
private TextView mClassTitle, mTturriculum, mTClassroom, mTStudying, mTotalSchedule;

    public ViewHolder(View view) {
super(view);
        if (itemView == mHeaderView) {
mTotalSchedule = view.findViewById(R.id.tv_totalSchedule);
            return;
        }
if (itemView == mFooterView) {
return;
        }
/**
         * 內容
         */
mClassTitle = (TextView) view.findViewById(R.id.tv_classTitle);

    }
}
getItemViewType
@Override
public int getItemViewType(int position) {
if (mHeaderView == null && mFooterView == null) {
return TYPE_NORMAL;
    }
if (position == 0) { //第一個item應該載入Header
return TYPE_HEADER;
    }
if (position == getItemCount() - 1) { //最後一個,應該載入Footer
return TYPE_FOOTER;
    }
return TYPE_NORMAL;
}

 到此完成!!