Android ListView:在不滚动的情况下检测ListView数据是否适合屏幕
可能重复:Android ListView:在不滚动的情况下检测ListView数据是否适合屏幕,android,listview,Android,Listview,可能重复: 我有一个简单的列表视图,只有几个条目。根据设备大小和方向,ListView是否需要滚动 我在屏幕上也有一张图片,这不是真的需要。如果没有足够的空间用于不滚动的ListView,我想删除图片 当我在活动的onCreate中填充ListView时,getLastVisiblePosition()仍然无效,它返回-1。因此,我无法将最后一个可见项与列表计数进行比较 int lastVisiblePos=listView.getLastVisiblePosition();//返回-1 (如
我有一个简单的列表视图,只有几个条目。根据设备大小和方向,ListView是否需要滚动 我在屏幕上也有一张图片,这不是真的需要。如果没有足够的空间用于不滚动的ListView,我想删除图片 当我在活动的onCreate中填充ListView时,getLastVisiblePosition()仍然无效,它返回-1。因此,我无法将最后一个可见项与列表计数进行比较 int lastVisiblePos=listView.getLastVisiblePosition();//返回-1 (如果稍后单击按钮重新检查,则该值是正确的。) 使用onScrollingListener为时已晚,因为首先不应该显示图片 我正在开发API级别10
有什么建议吗?你为什么要找问题?您可以使用3种布局来代替您的想法:
在Runnable中与进行比较,查看整个ListView是否在绘制完成后立即显示在屏幕上。您还应该检查最后一行是否完全适合屏幕 创建可运行的:
ListView listView;
Runnable fitsOnScreen = new Runnable() {
@Override
public void run() {
int last = listView.getLastVisiblePosition();
if(last == listView.getCount() - 1 && listView.getChildAt(last).getBottom() <= listView.getHeight()) {
// It fits!
}
else {
// It doesn't fit...
}
}
};
在初始化listview并将其设置为内容视图后,您是否尝试调用此方法?在
listview
引用上发布Runnable
,并在该Runnable
中使用getLastVisiblePosition
方法。但是,在setContentView()之后,视图本身应该准备就绪,当您完成将项目加载到listview中时,listview就真正准备好了,您可以在一个后延迟的线程中使用它。感谢Kirill,现在使用runnabel返回正确的值。不幸的是,lastVisibleItem返回最后一个部分可见的项。因此,如果列表中的最后一项没有完全显示,我无法识别它。不同的问题。listView.post(new Runnable(){public void run(){int lastVisiblePos=listView.getLastVisiblePosition();if(lastVisiblePospublic boolean doesItFit(ListView ListView){int last=ListView.getLastVisiblePosition();int first=ListView.getFirstVisiblePosition();View firstPosition=ListView.getChildAt(第一);View lastPosition=ListView.getChildAt(最后);return last==listView.getCount()-1&&first==0&&last!=-1&&firstPosition.getTop()==0&&lastPosition.getBottom()
ListView listView;
Runnable fitsOnScreen = new Runnable() {
@Override
public void run() {
int last = listView.getLastVisiblePosition();
if(last == listView.getCount() - 1 && listView.getChildAt(last).getBottom() <= listView.getHeight()) {
// It fits!
}
else {
// It doesn't fit...
}
}
};
listView.post(fitsOnScreen);