PullRefreshView
PullRefreshView copied to clipboard
PullRefreshLayout 不显示Header和Footer
如果在布局文件中没有声明 BaseHeaderView或BaseFooterView,而是通过代码 new相关View ,再采用pullRefreshLayout.setHeader(..) 或pullRefreshLayout.setFooter(..)进行赋值,会无法显示头部和底部,必须再addView一下才可以显示,而且是先setHead 或 setFooter 再addView。
或者修改PullRefreshLayout的setHeader和setFooter 为如下方法也可以解决:
public void setHeader(Refreshable header) {
setHeader(header,true);
}
public void setFooter(Loadable footer) {
setFooter(footer,true);
}
private void setHeader(Refreshable header,boolean add) {
if (mHeader != null && isMyChild((View) mHeader)) {
removeView((View) mHeader);
}
this.mHeader = header;
mHeader.setPullRefreshLayout(this);
if(add)super.addView((View)mHeader);
}
private void setFooter(Loadable footer,boolean add) {
if (mFooter != null && isMyChild((View) mFooter)) {
removeView((View) mFooter);
}
this.mFooter = footer;
mFooter.setPullRefreshLayout(this);
if(add)super.addView((View)mFooter);
}
@Override
public void addView(View child, int index, ViewGroup.LayoutParams params) {
if (child instanceof Refreshable) {
setHeader((Refreshable) child,false);
} else if (child instanceof Loadable) {
setFooter((Loadable) child,false);
}
super.addView(child, index, params);
}
原来的设计是为了 实现 HeaderView或FooterView 不作为 pullRefreshLayout 子布局的情况,以实现HeaderView FooterView 能布局到其它地方