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

Android 将特定的ListView项目滚动到视图中,android,listview,android-arrayadapter,Android,Listview,Android Arrayadapter,在我的应用程序中,我有一个列表视图。列表中每个项目的数据都是SomeItem类的一个实例。列表有一个自定义的ArrayAdapter,它有一个自定义视图来显示每个项目的各个字段,并覆盖getView()方法。列表视图初始化的框架代码: ListView listView = (ListView) foo.getViewById(R.id.listView); ArrayAdapter<SomeItem> adapter = new ArrayAdapter<SomeItem&

在我的应用程序中,我有一个
列表视图
。列表中每个项目的数据都是
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
    }
}
ListView ListView=(ListView)foo.getViewById(R.id.ListView);
ArrayAdapter=新的ArrayAdapter(活动,R.layout.listItemView,R.id.textView){
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
//用于生成具有多个子视图的视图的代码
}
}
现在假设我有一个
SomeItem
实例。其关联视图可能在屏幕上显示的
列表视图的部分中,也可能不在该部分中。如果不是,如何让
列表视图
将此特定项目滚动到视图中


我发现的唯一一个稍微相关的方法是
ListView#requestChildRectangleOnScreen()
,它要求我提供一个我没有的子视图。我有适配器的项目。所以我还是不知道该怎么把它拼凑起来。有任何指针吗?

您可以尝试以下操作:

  • 计算要使其可见的
    SomeItem
    项的位置。您可以通过迭代传递给适配器的
    SomeItem
    s列表来完成此操作

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

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


  • 这个问题不是很清楚。你能给我们看一些以图片形式表达你需求的东西吗?我已经编辑了这个问题。现在清楚了吗?您将如何确定屏幕上需要显示哪些项目?你的逻辑是什么?可能有不同的方法来确定,但它不是100%确定的。但是,决策是在填充项目列表的级别做出的,代码将返回一个
    SomeItem
    实例。现在我只需要把它展示出来。谢谢,看起来很有希望。我会投票;一旦我成功试用,就会被接受。看看API,有一个
    ArrayAdapter#getPosition()
    应该返回位置,所以我想我不需要迭代器。另外,我真的需要执行#2吗?还是滚动到一个已经在视图中的项目是一个真正的无操作(意味着列表将不会移动,而不是移动到默认位置)?我真的不记得如何
    smoothScrollToPosition()
    适用于已显示的项目-它可能会导致小抽搐将其作为顶部项目放置。也许不是。或者这正是你想要的。因此,尝试不使用步骤2滚动,看看结果是否满足您的要求。我简单地尝试了一下:滚动到列表视图的顶部,选择屏幕底部的项目(屏幕上的部分不到列表的一半),然后等待列表填满。直到新项目开始将所选内容推离屏幕,然后移到屏幕底部并停留在屏幕上,才开始抽搐。正是我所需要的!很高兴看到这一点!=)