Android 為RecyclerView新增HeaderView和FooterView
阿新 • • 發佈:2019-02-03
對於新增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 |
@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);
} |
@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; } } |
@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; } } |
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); } } |
@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; } |
到此完成!!