2012-02-27 79 views
5

如何爲listFragment創建一個平滑的setSelection(position)。對於常規列表視圖,可以調用smoothScrollToPosition(position),但這僅適用於api lvl 8及更高版本,但這並不重要,因爲它不適用於listfragment而不適用於api lvl 7.Android如何爲listfragment製作動畫setSelection()?

任何創意,將有助於實現這一點的建議,不勝感激。

回答

21

馬克d是正確的,如果你想順利請在ListFragment中滾動ListView,您需要在ListFragment上撥打getListView(),然後在返回的ListView上撥打smoothScrollToPosition(int)。當然,這隻適用於API級別8,因爲smoothScrollToPosition(int)被引入AbsListView,即ListView的超級類別。

我想你可以看看代碼AbsListView.java,看看它做什麼,並嘗試複製它在自己的AbsListViewListView子類。很明顯,smoothScrollToPosition(pos)只是在內部類PositionScroller的一個實例上調用start(pos),但是在您自己的子類中複製該行爲看起來有些複雜,因爲PositionScrolleronDetachedFromWindow(),public void onWindowFocusChanged(boolean hasWindowFocus)等幾個其他點被調用。我根本不清楚你如何根據AbsListView的API 7版本將你的PositionScroller行爲乾淨地整合到你的子類中。

如果我決定使用API​​ 7和更早版本在最近的data set中訪問Android電子市場的設備不到8%,那麼只要API低於8,我就可以踢一些簡單的東西,比如setSelectionFromTop (由Build.VERSION.SDK_INT檢測到)。

+0

感謝您的答覆:) – Warpzit 2012-03-08 13:58:19

+0

它也在這裏工作!謝謝 – Aci89 2015-07-19 05:05:11

6

我不認爲你可以爲API級別7做到這一點,但看到如果不能平滑滾動通過去像這樣:

listFragment.getListView().smoothScrollToPosition(0); 
+0

你真的試過了嗎?這不是listfragment支持的。 – Warpzit 2012-03-05 12:25:59

+0

我能夠得到這個版本的工作在蜂窩設備和ICS設備上。你在哪裏看到它不被支持(你可能是對的)? – 2012-03-06 19:52:20