在我的申请中,我有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()
,这要求我提供一个我没有的子视图。我有适配器的项目。所以我仍然不确定如何将它拼凑在一起。有什么指针吗?
答案 0 :(得分:1)
您可以尝试以下操作:
计算要显示的SomeItem
项目的位置。您可以通过迭代传递给适配器的SomeItem
列表来完成此操作。
使用listView.getFirstVisiblePosition()
,listView.getLastVisiblePosition()
和计算出的位置来检查项目是否在列表中可见。
如果该项目不可见,请拨打listView
,使listView.smoothScrollToPosition(calculatedPosition)
滚动到该项。