将特定的 ListView 项目滚动到视图中

Scroll a particular ListView item into view

在我的应用程序中,我有一个 ListView。列表中每个项目的数据都是 SomeItem class 的一个实例。该列表有一个自定义 ArrayAdapter,它有一个自定义视图来显示每个项目的各个字段并覆盖 getView() 方法。列表视图初始化的骨架代码:

ListView listView = (ListView) foo.getViewById(R.id.listView);

ArrayAdapter<SomeItem> adapter = new ArrayAdapter<SomeItem>(activity, R.layout.listItemView, R.id.textView) {
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // Code to build the view with multiple child views
    }
}

现在假设我有一个 SomeItem 实例。它的关联视图可能在也可能不在屏幕上显示的 ListView 部分中。如果不是,我怎样才能让 ListView 将这个特定项目滚动到视图中?

我发现的唯一有点相关的方法是 ListView#requestChildRectangleOnScreen(),它需要我提供一个我没有的子视图。我有适配器的物品。所以我仍然不确定如何将它们拼凑在一起。有什么指点吗?

您可以尝试以下方法:

  1. 计算要显示的 SomeItem 项目的位置。您可以通过遍历传递给适配器的 SomeItem 列表来完成此操作。

  2. 使用listView.getFirstVisiblePosition()listView.getLastVisiblePosition()和计算出的位置来检查项目是否在列表中可见。

  3. 如果该项目不可见,请通过调用 listView.smoothScrollToPosition(calculatedPosition) 使 listView 滚动到它。