I building an app where pulltorefresh and stickylistHeaders are both need.i have implemented the pulltorefresh in the app but am not able to make it work with stickyListHeaders.Is it possible to merge the two libraries? Or is there any alternative?any Ideas?
My implementation was broken after updating both libraries, too. This is my quick fix to make it work again. Any suggestions and improvements are welcome!
Make a new class and extend the SticklistListHeadersListView and implement the ViewDelegate interface from ActionBar-PullToRefresh:
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;
}
}
And in your layout.xml
replace
<se.emilsjolander.stickylistheaders.StickyListHeadersListView
...>
with
<com.yourapp.package.foo.PtrStickyListHeadersListView
...>
And at last, add the delegate: (listView
is an instance of 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);
Similar to Helden's answer, you can also achieve this using an anonymous inner class without extending 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);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With