Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ListView:在不滚动的情况下检测ListView数据是否适合屏幕_Android_Listview - Fatal编程技术网

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种布局来代替您的想法:

  • 小部件(如果需要)-标题
  • ListView-主布局
  • ImageView或其他小部件-页脚

  • 在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);