2012-02-27 3 views
5

listFragment에 대해 부드러운 setSelection (위치)을 만드는 방법은 무엇입니까? 일반 목록보기의 경우 smoothScrollToPosition (position)을 호출 할 수 있지만 api lvl 8 이상에서만 작동하지만 listfragment에서는 작동하지 않고 api lvl 7에서는 작동하지 않기 때문에 중요하지 않습니다.안드로이드 어떻게 listfragment 애니메이션 setSelection()?

아이디어가 없습니다. 이를 구현하는 데 도움이되는 제안은 크게 감사하겠습니다.

답변

21

마크 D가 정확하면 부드럽게 할 경우, 해당 ListFragmentListView을 스크롤하십시오. ListFragment에서 getListView()으로 전화 한 다음 에서 smoothScrollToPosition(int)으로 전화해야합니다. 물론 이것은 smoothScrollToPosition(int)AbsListView에 소개되었을 때 ListView의 수퍼 클래스 인 API 레벨 8에서만 작동합니다.

AbsListView.java의 코드를보고 자신의 하위 클래스 인 AbsListView 또는 ListView에 복제하려고 시도해 볼 수 있습니다. smoothScrollToPosition(pos) 단지 내부 클래스 PositionScroller의 인스턴스에 start(pos) 호출하지만 그것은 PositionScrollerpublic void onWindowFocusChanged(boolean hasWindowFocus), onDetachedFromWindow() 같은 여러 가지 다른 장소에서 호출되는 이후 자신의 하위 클래스에서이 동작을 복제하는 데 다소 복잡해 보이는 것을 즉시 분명하다. AbsListView의 API 7 버전을 기반으로 Subscript에 PositionScroller 비헤이비어를 어떻게 완벽하게 통합 할 수 있을지 전혀 분명하지 않습니다.

내 결정에 API가 7 이하인 경우 최신 data set의 Android 마켓에 액세스하는 기기 중 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 장치에서 작동시킬 수있었습니다. 당신이 그것이 지원되지 않는다고 어디에서 보십니까 (당신이 옳을 수도 있습니다)? –