【发布时间】:2011-10-19 09:25:23
【问题描述】:
我的活动中有一个列表视图和一个图像按钮。 当我单击图像按钮时,我想转到列表中的特定位置(我通过调用列表中的 setSelection(int position) 来做到这一点。 当用户抛出列表视图然后单击图像按钮时会出现问题。 列表转到指定位置但继续滚动。
例如。当我进入投掷模式时,单击按钮,然后我转到第四个位置,但列表视图一直在滚动,所以我最终选择了 25
【问题讨论】:
我的活动中有一个列表视图和一个图像按钮。 当我单击图像按钮时,我想转到列表中的特定位置(我通过调用列表中的 setSelection(int position) 来做到这一点。 当用户抛出列表视图然后单击图像按钮时会出现问题。 列表转到指定位置但继续滚动。
例如。当我进入投掷模式时,单击按钮,然后我转到第四个位置,但列表视图一直在滚动,所以我最终选择了 25
【问题讨论】:
我已经编写了简单的方法来使用反射停止 scoll ListView。
private void stopScroll(AbsListView view)
{
try
{
Field field = android.widget.AbsListView.class.getDeclaredField("mFlingRunnable");
field.setAccessible(true);
Object flingRunnable = field.get(view);
if (flingRunnable != null)
{
Method method = Class.forName("android.widget.AbsListView$FlingRunnable").getDeclaredMethod("endFling");
method.setAccessible(true);
method.invoke(flingRunnable);
}
}
catch (Exception e) {}
}
只需调用 stopScroll(myListView);当您需要停止滚动时。
【讨论】:
// Stop scrolling
smoothScrollBy(0, 0);
这将在内部调用@Nik 试图反映的方法。
【讨论】:
使用
listView.smoothScrollBy(0, 0); // to stop the scrolling.
// followed by
listView.setSelection(position) // to move to the specific position.
【讨论】:
你有一个手动滚动的方法 你可以调用 listview.scrollTo(int, int); 但我不知道如何计算滚动量,我的意思是如何计算方法的参数。此外,这不会停止滚动它只是将您定位在特定位置然后停止滚动,因此您可能会有一点闪烁...... 如果列表中的问题没有解决您的问题,将会给出一些提示。
more关于方法
【讨论】:
我会尝试调用ListView.smoothScrollToPosition(int position) 以滚动回正确的位置。由于所有 gui 的东西都是在一个线程中完成的,我认为几乎没有机会真正停止按下按钮时的滚动,所以最简单的方法是向后滚动(这甚至可能是一个不错的 gui 效果)。
【讨论】:
你试过listView.clearAnimation() 吗?它可能会工作
【讨论】: