在android-列表视图中只找出完全可见的列表项

时间:2015-03-26 12:06:06

标签: android android-listview

我想找出与ListView's项目相关的位置或ID:只显示在屏幕上完全可见的那些位置。
使用listview.getFirstVisiblepositionlistview.getLastVisibleposition会考虑部分列表项。

2 个答案:

答案 0 :(得分:3)

我遵循了Rich建议的一些类似的方法,以满足我的要求,即每次滚动列表视图时都会在屏幕上获取完全可见的项目。

这就是我做的

public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
    //Loop to get tids of all completely visible List View's item scrolled on screen
    for (int listItemIndex = 0; listItemIndex <= getListView().getLastVisiblePosition() - getListView().getFirstVisiblePosition(); listItemIndex++) {

        View listItem = getListView().getChildAt(listItemIndex);
        TextView tvNewPostLabel = (TextView) listItem.findViewById(R.id.tvNewPostLabel);
        if (tvNewPostLabel != null && tvNewPostLabel.getVisibility() == View.VISIBLE) {
            int listTid = (int) tvNewPostLabel.getTag();
            if (listItem.getBottom() < getListView().getHeight()) {//If List View's item is not partially visible
                listItemTids.add(listTid);
            }
        }
    }
}

答案 1 :(得分:1)

我没有尝试过这个,但是我认为这些框架可以让你找到你想要的东西(至少这是我先试试的)

  1. 正如您所说,您应该使用ListView.getLastVisiblePosition()
  2. 从列表视图中获取最后一个可见位置
  3. 然后,您可以使用ListView.getChildAt(position)
  4. 访问代表此排名的视图
  5. 您现在可以参考该视图,您可以将其称为View.getLocationOnScreen(location)View.getHeight()
  6. 的组合
  7. 同时在ListView上调用View.getLocationOnScreen(location)View.getHeight()y + height的{​​{1}}应该小于或等于View的{​​{1}},如果它完全可见的话。