如何在滚动后获取列表视图中的当前视图项

时间:2015-10-22 06:47:48

标签: android listview onscrolllistener



滚动列表视图时,我希望获得具有textview和图像的当前视图。
基于此我想在列表顶部显示第一个可见联系人视图项目的起始字母,类似于我们的联系人列表。
我尝试了以下内容,但这是滚动后给出无效索引。 / p>

HomeContactView extends AppCompatActivity implements AbsListView.OnScrollListener

覆盖相应的方法

 @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
final ListView listView = mainListView;
        int location = listView.getFirstVisiblePosition();
}

通过这个我无法获得当前的焦点视图及其元素。如何实现这一目标?任何帮助都非常明显。
enter image description here

3 个答案:

答案 0 :(得分:1)

为什么不使用RecyclerView / ListView的getFocusedChild()方法?该方法仅在用户聚焦视图时才有效

另一种方法,你可以做到

View v = listview.getChildAt(listview.getFirstVisiblePosition());
String firstLetter = ((TextView)v.findViewById(R.id.textview)).getText().toString().substring(0,1);

答案 1 :(得分:1)

您可以使用getChildAt metgod:

获取第一行
View convertView = listview.getChildAt(listview.getFirstVisiblePosition());

并且您可以使用转换视图找到对象,如下所示:

convertView.findRbyID(R.id.textview)

但建议使用`RecyclerView ...

答案 2 :(得分:1)

我认为您的代码接近正确。我会使用当前参数view并对其进行类型转换。然后我检查滚动状态(参数scrollState)。您希望在用户仍在滚动时避免处理ListView。

代码示例:

@Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
       if (scrollState == SCROLL_STATE_IDLE) {
          final ListView listView = (ListView) view;
          int location = listView.getFirstVisiblePosition();

          View firstView = listview.getChildAt(location);
        }
   }

您还可以覆盖其他方法public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)。此方法的好处是您可以将 firstVisibleItem 作为整数类型。我已经使用过它,准确