-
Notifications
You must be signed in to change notification settings - Fork 4
添加 Header Footer
DONG edited this page Oct 23, 2019
·
3 revisions
需要继承 BaseSectionHeaderFooter<T>
, T
为外部可能需要传入的数据类型. 若无外部数据传入, 可省略.
以下例子为创建一个可复用 Footer, 外部传入显示的 String
类型的标题 mTitle
:
public class CustomFooterProvider extends BaseSectionHeaderFooter<String> {
private String mTitle;
public CustomFooterProvider(Context context) {
super(context);
}
@Override
public int getLayout() {
return R.layout.item_footer;
}
@Override
public void onBind(BaseViewHolder holder, IndexPath indexPath) {
holder.setText(R.id.tv_title, mTitle); // 设置标题内容
}
// 指定泛型为 <String> 类型后, 可主动覆写 setData 方法
@Override
public void setData(String newData) {
this.mTitle = newData;
}
}
用户也可自定义数据传入的方法. 这里使用泛型和覆写
setData(T newData)
方法是为了统一数据传入 Provider 的入口. 所有开发人员建议都遵循这一个规定. 易于代码的阅读和维护.
在 Adapter 中设置给相应的 Section 的 Provider:
mDemoItemProvider.setHeader(mCustomHeaderProvider);
mDemoItemProvider.setFooter(mCustomFooterProvider);
Header/Footer 中添加监听事件, 这里使用 Demo 中 NewsHeaderProvider
为例:
public class NewsHeaderProvider extends BaseSectionHeaderFooter<String> {
// 监听接口定义在 Provider 内部
public interface NewsHeaderProviderListener {
void onNotifyHeaderClick();
void onNotifyFooterClick();
};
private NewsHeaderProviderListener mListener;
private String mTitle;
public NewsHeaderProvider(Context context) {
super(context);
}
@Override
public int getLayout() {
return R.layout.item_complex_news_header;
}
@Override
public void onBind(BaseViewHolder holder, IndexPath indexPath) {
holder.setText(R.id.tv_title, mTitle);
holder.setClick(R.id.btn_add_one, this, indexPath); // 设置按钮点击事件
holder.setClick(R.id.btn_add_two, this, indexPath);
}
@Override
public void onClick(BaseViewHolder holder, IndexPath indexPath, int viewId) {
switch (viewId) {
case R.id.btn_add_one:
if (mListener != null) mListener.onNotifyHeaderClick();
break;
case R.id.btn_add_two:
if (mListener != null) mListener.onNotifyFooterClick();
break;
}
}
// 在 Adapter 中传入监听实现
public void setListener(NewsHeaderProviderListener listener) {
this.mListener = listener;
}
@Override
public void setData(String newData) {
this.mTitle = newData;
}
}