PullRefreshView icon indicating copy to clipboard operation
PullRefreshView copied to clipboard

PullRefreshLayout 不显示Header和Footer

Open boydos opened this issue 7 years ago • 1 comments

如果在布局文件中没有声明 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);
}

boydos avatar Jun 21 '17 17:06 boydos

原来的设计是为了 实现 HeaderView或FooterView 不作为 pullRefreshLayout 子布局的情况,以实现HeaderView FooterView 能布局到其它地方

pierre-primary avatar Oct 11 '17 10:10 pierre-primary