将特定的 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()
,它需要我提供一个我没有的子视图。我有适配器的物品。所以我仍然不确定如何将它们拼凑在一起。有什么指点吗?
您可以尝试以下方法:
计算要显示的 SomeItem
项目的位置。您可以通过遍历传递给适配器的 SomeItem
列表来完成此操作。
使用listView.getFirstVisiblePosition()
、listView.getLastVisiblePosition()
和计算出的位置来检查项目是否在列表中可见。
如果该项目不可见,请通过调用 listView.smoothScrollToPosition(calculatedPosition)
使 listView
滚动到它。
在我的应用程序中,我有一个 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()
,它需要我提供一个我没有的子视图。我有适配器的物品。所以我仍然不确定如何将它们拼凑在一起。有什么指点吗?
您可以尝试以下方法:
计算要显示的
SomeItem
项目的位置。您可以通过遍历传递给适配器的SomeItem
列表来完成此操作。使用
listView.getFirstVisiblePosition()
、listView.getLastVisiblePosition()
和计算出的位置来检查项目是否在列表中可见。如果该项目不可见,请通过调用
listView.smoothScrollToPosition(calculatedPosition)
使listView
滚动到它。