在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()
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哈希集调用我的请求,使这些文章成为已读。