Question

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?

Was it helpful?

Solution

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!

  1. 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;
        }
    }
    
  2. And in your layout.xml replace

    <se.emilsjolander.stickylistheaders.StickyListHeadersListView
            ...>
    

    with

    <com.yourapp.package.foo.PtrStickyListHeadersListView
            ...>
    
  3. 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);
    

OTHER TIPS

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);
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top