我构建了一个应用程序,其中pulltorefresh和stickylistHeaders都需要。我已经在应用程序中实现了pulltorefresh但是无法使其与stickyListHeaders一起使用。是否可以合并这两个库? 或者有其他选择吗?任何想法?
答案 0 :(得分:7)
在更新两个库后,我的实现也被破坏了。这是我的快速修复,使其再次运行。 欢迎任何建议和改进!
创建一个新类并扩展SticklistListHeadersListView并从ActionBar-PullToRefresh实现ViewDelegate接口:
public class PtrStickyListHeadersListView extends StickyListHeadersListView
implements ViewDelegate {
public PtrStickyListHeadersListView(Context context) {
super(context);
}
public PtrStickyListHeadersListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public PtrStickyListHeadersListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean isReadyForPull(View view, float v, float v2) {
View childView = getWrappedList().getChildAt(0);
int top = (childView == null) ? 0 : childView.getTop();
return top >= 0;
}
}
在您的layout.xml
替换
<se.emilsjolander.stickylistheaders.StickyListHeadersListView
...>
与
<com.yourapp.package.foo.PtrStickyListHeadersListView
...>
最后,添加委托:(listView
是PtrStickyListHeadersListView的一个实例)
ActionBarPullToRefresh.from(getActivity())
// We need to insert the PullToRefreshLayout into the Fragment 's ViewGroup
.insertLayoutInto(viewGroup)
// We need to mark the ListView and it 's Empty View as pullable
// This is because they are not dirent children of the ViewGroup
.theseChildrenArePullable(R.id.your_list_id)
// We can now complete the setup as desired
.listener(...)
.useViewDelegate(PtrStickyListHeadersListView.class, listView)
.setup(mPullToRefreshLayout);
答案 1 :(得分:3)
与Helden的答案类似,您也可以使用匿名内部类来实现此目的,而无需扩展StickyListHeadersListView
myList = (StickyListHeadersListView) v.findViewById(R.id.your_list_id);
ActionBarPullToRefresh.from(getActivity())
.allChildrenArePullable()
.listener(this)
.useViewDelegate(StickyListHeadersListView.class, new ViewDelegate() {
@Override
public boolean isReadyForPull(View view, float v, float v2) {
return ... //check if list is scrolled to the top or not
}
})
.setup(mPullToRefreshLayout);