我在AlertDialog中显示了大量项目。我想向用户显示滚动到最有可能从中选择一项的区域的列表。我正在使用

AlertDialog.Builder.setSingleChoiceItems(myAdapter, ...).
ArrayAdapter<MyType> myAdapter;

我很难解决的问题是在逻辑上不正确显示所选项目时如何滚动到该项目。

我尝试从生成的ListView获取AlertDialog。但是它是空的(即使在Builder创建并显示它之后)。
我尝试通过在res/layout中将平面ListView膨胀来强制填充ListViewlistView.scrollTo(x, y)似乎没有作用。
我尝试设置AlertDialog的OnShowListener。从未调用onShow()。

有人知道解决方法吗?

最佳答案

您可以使用ListView类的一部分功能:

smoothScrollByOffset(int offset);

要么
smoothScrollToPosition(int position);



如果要一一滚动,可以使用以下功能:
private void scrollToNext() {
int currentPosition = getListView().getFirstVisiblePosition();
if (currentPosition == getListView().getCount() - 1)
    return;
getListView().setSelection(currentPosition + 1);
getListView().clearFocus();
}

private void scrollToPrevious() {
int currentPosition = getListView().getFirstVisiblePosition();
if (currentPosition == 0)
    return;
getListView().setSelection(currentPosition - 1);
getListView().clearFocus();
}

07-26 00:36