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

时间:2017-10-05 21:54:06

标签: android listview android-arrayadapter

在我的申请中,我有ListView。列表中每个项目的数据是SomeItem类的实例。该列表具有自定义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 个答案:

答案 0 :(得分:1)

您可以尝试以下操作:

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

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

  3. 如果该项目不可见,请拨打listView,使listView.smoothScrollToPosition(calculatedPosition)滚动到该项。