Home » Android » android – PullToRefresh list with pinned section header

android – PullToRefresh list with pinned section header

Posted by: admin June 15, 2020 Leave a comment


Does anyone has practice of using Pull to refresh list with Pinned section header?
I use Android-PullToRefresh lib with my list and I want to add ability of showing pinned section header at the top of list. I used PinnedHeaderListView lib in another project for pinned section. But I can’t combine these two libraries into one.

Is Android-PullToRefresh can show pinned section header? Perhaps any other Pull to refresh lib can do it?

How to&Answers:

It’s possible to integrate the Actionbar-PullToRefresh library with the StickyListHeaders library, but you need to use a custom Delegate in order to get Actionbar-PullToRefresh to work correctly:

public class StickyListViewDelegate extends AbsListViewDelegate {
    @Override public boolean isReadyForPull(View view, final float x, final float y) {
    StickyListHeadersListView sticky = (StickyListHeadersListView) view;
    return super.isReadyForPull(sticky.getWrappedList(), x, y);

Integrated like so:

StickyListViewDelegate delegate = new StickyListViewDelegate();
    .useViewDelegate(StickyListHeadersListView.class, delegate)

The reason that the two libraries don’t work together is because the StickyListHeadersListView class does not actually extend ListView (which is what the Actionbar-PullToRefresh library looks for when assigning a delegate by default).


I did some research and I found 2 alternatives:

  1. StickyListHeaders. This library is contributed by Jake Wharton (reference) so it is promising and could be compatible with other libraries. You should try to use it.
  2. PinnedSectionListView – easy to use ListView with pinned sections for Android.

You can try combining these two libraries with ActionBar-PullToRefresh. I suppose you can implement the solution 😉


You can use a combination of SwipeRefreshLayout of support-library and the PinnedHeaderListview.

In your XML file, use like following:

        android:layout_height="match_parent" >

            android:layout_height="match_parent" >

And then in java code, just write codes for your PinnedHeaderListView as usual. Finally just put a Refresh Listener for your SwipeRefreshLayout like below:

                    .setOnRefreshListener(new OnRefreshListener() {

                        public void onRefresh() {
                        // do your refresh tasks here

You are done.


SwipeRefreshLayout + any other suitable library that you would use can do the job.
I would prefer PinnedSectionListView beacuse it uses Listview and it has it its pros in terms of UI/UX.