Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

is it possible to merge stickylistviewheader with crisbanes pulltorefresh?

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?

like image 608
shreyas Avatar asked Dec 25 '22 17:12

shreyas


2 Answers

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);
    
like image 90
Helden Avatar answered Dec 31 '22 12:12

Helden


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);
like image 38
dvdrlee Avatar answered Dec 31 '22 12:12

dvdrlee