2012-02-27 6 views
5

listFragmentのスムーズなsetSelection(position)をどのようにすることが可能ですか?通常のリストビューではsmoothScrollToPosition(position)を呼び出すことはできますが、これはapi lvl 8以上でのみ有効ですが、これはlistfragmentでは機能せず、api lvl 7では機能しないため問題ありません。Android listfragmentのアニメーション化されたsetSelection()を作成する方法は?

これを実現するのに役立つ提案は非常に高く評価されます。

答えて

21

マークDが正しいかあなたが滑らかにしたい場合は、そのListFragmentListViewをスクロールする場合は、ListFragmentgetListView()と電話し、のsmoothScrollToPosition(int)を返す必要があります。もちろん、これはAPIレベル8までしか動作しません。smoothScrollToPosition(int)AbsListViewに、ListViewのスーパークラスに導入されたからです。

AbsListView.javaのコードを見て、自分のサブクラスであるAbsListViewまたはListViewでそれを複製しようとするといいでしょう。 PositionScrollerのインスタンスでsmoothScrollToPosition(pos)がただstart(pos)を呼び出していることがすぐわかりますが、がonDetachedFromWindow()public void onWindowFocusChanged(boolean hasWindowFocus)のようないくつかの別の場所から呼び出されているので、自分のサブクラスでその動作を複製するのがやや複雑に見えます。 AbsListViewのAPI 7バージョンに基づいて、あなたのサブスクラスにあなたのPositionScrollerの振る舞いをきれいに統合する方法は私にはっきりと分かりません。

最新のdata setでAPI 7以前のデバイスで8%未満のデバイスを占有していたのが私の決定だった場合は、APIが8よりも低い場合はsetSelectionFromTopのような簡単な処理をします(Build.VERSION.SDK_INTによって検出されます)。

+0

全面的な答えをありがとう:) – Warpzit

+0

それもここで働いた!ありがとう – Aci89

6

私はあなたがAPIレベル7のためにこれを行うことができると思いますが、あなたはこのように行くことによってではないスムーズなスクロールできるかどうかを確認しません。

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

実際に試してみましたか?これはlistfragmentではサポートされていません。 – Warpzit

+0

これをHoneycombデバイスとICSデバイスで動作させるためのバージョンを取得できました。あなたはそれがサポートされていないことが分かりますか(あなたが正しいかもしれません)? –

関連する問題