如何为listFragment创建平滑的setSelection(position)。对于常规列表视图,可以调用smoothScrollToPosition(position),但这仅适用于api lvl 8及更高版本,但这并不重要,因为它不适用于listfragment而不适用于api lvl 7.
非常感谢任何有助于实现这一点的想法和建议。
答案 0 :(得分:22)
标记D是正确的,如果您要平滑滚动ListView
中的ListFragment
,则需要在getListView()
上调用ListFragment
,然后调用{{ 1}}在返回的smoothScrollToPosition(int)
上。当然,这仅适用于API级别8,因为这是ListView
引入smoothScrollToPosition(int)
的超级类{。}}。
我想您可以查看AbsListView
中的代码,看看它的作用,并尝试在您自己的ListView
或AbsListView.java
子类中复制它。很明显AbsListView
只是在内部类ListView
的实例上调用smoothScrollToPosition(pos)
,但是在start(pos)
得到PositionScroller
之后,在您自己的子类中复制该行为看起来有些复杂来自其他几个地方,例如PositionScroller
,onDetachedFromWindow()
。我根本不清楚如何根据API public void onWindowFocusChanged(boolean hasWindowFocus)
版本将您的PositionScroller行为整合到您的子类中。
如果是我的决定,使用API 7及更早版本在最新的data set中只有不到8%的设备访问Android电子市场,我只会尝试做一些更简单的事情,例如AbsListView
每当API低于8(由Build.VERSION.SDK_INT检测到)时。
答案 1 :(得分:6)
我认为你不能为API等级7执行此操作,但看看你是否不能通过这样的方式平滑滚动:
listFragment.getListView().smoothScrollToPosition(0);