2013-06-24 22 views
8

沒有人有使用Pull to refresh清單,Pinned section header的做法? 我使用Android-PullToRefresh lib與我的列表,我想增加在列表頂部顯示固定部分標題的功能。我在另一個項目中使用了PinnedHeaderListView lib作爲固定部分。但我無法將這兩個庫合併爲一個。PullToRefresh清單,固定節頭

是Android的PullToRefresh可以顯示固定節頭?也許任何其他Pull to refresh庫可以做到這一點?

+1

在我看來,你應該使用[動作條-PullToRefresh(https://github.com/chrisbanes/ActionBar-PullToRefresh),因爲Android的PullToRefresh尚未支持5個月。 – mmBs

+0

大評論,我不得不注意lib。但我不確定它是否支持固定標題。 – dimetil

+0

我正在嘗試做同樣的事情。到目前爲止,我唯一的結論是,我必須在其中一個庫的頂部實現其中一個行爲,因爲合併或使用兩者都不起作用。 – neteinstein

回答

4

我做了一些研究,我發現2層的替代品:

  1. StickyListHeaders。這個圖書館由傑克·沃頓(Jake Wharton)(reference)貢獻,所以它很有前途,可以與其他圖書館兼容。你應該嘗試使用它。
  2. PinnedSectionListView - 易於使用的ListView與Android的固定部分。

您可以嘗試將這兩個庫與ActionBar-PullToRefresh結合使用。我想你可以實現的解決方案;)

+2

這對StickyListHeaders是不可能的。 StickyListHeaders實現了不受支持的FrameLayout中的「ListView」。 – neteinstein

+0

只是使用裏面的listview。 – virsir

9

這是可能的Actionbar-PullToRefresh庫與StickyListHeaders庫整合,但你需要爲了得到動作條,PullToRefresh正常工作使用自定義的代表:

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); 
} 

集成像這樣:

StickyListViewDelegate delegate = new StickyListViewDelegate(); 
ActionBarPullToRefresh.from(getActivity()).theseChildrenArePullable(mListView) 
    .useViewDelegate(StickyListHeadersListView.class, delegate) 
    .listener(this).setup(mPullToRefreshLayout); 

兩個庫不在一起工作的原因是因爲StickyListHeadersListView類實際上並沒有延伸的ListView(這是什麼動作條,PullToRefresh庫在默認情況下分配委託時尋找)。

+0

謝謝,你只是救了我的理智:)! – Nick

+0

我試過你的解決方案,但它仍然不適合我。你可以提供其他任何幫助嗎? – AndyN

+1

+1這適用於我! –

0

SwipeRefreshLayout +,你會使用可以勝任任何其他合適的庫。 我寧願PinnedSectionListView是因爲它使用Listview,它在UI/UX方面有它的優點。

2

您可以使用支持庫的SwipeRefreshLayoutPinnedHeaderListview的組合。

在你的XML文件,請使用類似以下內容:

<android.support.v4.widget.SwipeRefreshLayout 
     android:id="@+id/pinned_lisview_container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 

     <za.co.immedia.pinnedheaderlistview.PinnedHeaderListView 
      android:id="@+id/event_items_lisview" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" > 
     </za.co.immedia.pinnedheaderlistview.PinnedHeaderListView> 
    </android.support.v4.widget.SwipeRefreshLayout> 

然後在Java代碼中,只寫代碼的PinnedHeaderListView如常。最後,只需爲您的SwipeRefreshLayout放置一個Refresh Listener,如下所示:

pinned_lisview_container 
        .setOnRefreshListener(new OnRefreshListener() { 

         @Override 
         public void onRefresh() { 
         // do your refresh tasks here 
         } 
        }); 

您完成了。