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

在android-列表视图中只查找完全可见的列表项,android,android-listview,Android,Android Listview,我想找出与列表视图的项相关的位置或ID:仅那些在屏幕上完全可见的项。 使用listview.getFirstVisibleposition和listview.getLastVisibleposition会考虑部分列表项。我没有尝试过这一点,但以下是我相信可以帮助您找到所需内容的框架片段(至少这是我首先尝试的) 如前所述,应该使用ListView.getLastVisiblePosition() 然后,您可以使用ListView.getChildAt(position) 现在您有了对视图的引用,可

我想找出与
列表视图的
项相关的位置或ID:仅那些在屏幕上完全可见的项。

使用
listview.getFirstVisibleposition
listview.getLastVisibleposition
会考虑部分列表项。

我没有尝试过这一点,但以下是我相信可以帮助您找到所需内容的框架片段(至少这是我首先尝试的)

  • 如前所述,应该使用
    ListView.getLastVisiblePosition()
  • 然后,您可以使用
    ListView.getChildAt(position)
  • 现在您有了对视图的引用,可以将其称为
    view.getLocationOnScreen(location)
    view.getHeight()
  • 还可以在ListView上调用
    View.getLocationOnScreen(location)
    View.getHeight()
    <
    视图的code>y+高度
    应小于或等于
    列表视图的
    y+高度
    (如果它完全可见)

  • 我遵循了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);
                }
            }
        }
    }
    
    public void onScroll(AbsListView视图、int firstVisibleItem、int visibleItemCount、int totalItemCount){
    //循环以获取屏幕上滚动的所有完全可见列表视图项的TID
    
    对于(int listItemIndex=0;listItemIndex)您需要稍微改进这个问题:添加一些代码,以便人们看到您所做的和尝试的内容;此外,您所问的问题还不清楚;如果您添加其他标记(例如:
    android
    )会更好为了吸引更多的注意力。你想只显示可见的项目而不滚动你的listview吗?@Piyush每次滚动listview时,我只想在屏幕上找到完全可见的listview项目,而不是部分可见的项目。ListItemTid是什么?你能解释一下吗?我在中的所有较新帖子上都贴了一个新标签我的Newsfeed屏幕。我的要求是在用户滚动到帖子时从帖子中删除新标签。问题是,只有当用户滚动到帖子时,帖子在屏幕上完全可见时,才能删除标签。listTid实际上是帖子id。每个在屏幕上完全可见的列表项,我都将其listTid添加到一个稍后使用这个TID哈希集调用我的请求,使这些文章成为已读。