Android ListView:检测ListView数据是否适合屏幕而不滚动

Gun*_*ein 12 android listview

可能重复:
Android:使用notifyDataSetChanged和getLastVisiblePosition - 当listView实际更新时?

我有一个简单的ListView只有几个条目.根据设备大小和方向,ListView需要滚动或不滚动.

我在屏幕上还有一张照片,这不是必需的.如果ListView没有足够的空间而没有滚动,我想删除图片.

当我在活动的onCreate中填充ListView时,getLastVisiblePosition()尚未生效,它返回-1.因此,我无法比较最后一个可见项目与列表计数.

int lastVisiblePos = listView.getLastVisiblePosition(); //返回-1

(如果我稍后点击某个按钮重新检查,则该值是正确的.)

使用onScrollingListener为时已晚,因为图片不应该首先显示.

我正在开发API级别10.

有什么建议?

Sam*_*Sam 22

getLastVisiblePosition()getCount()Runnable进行比较,看看整个ListView是否在绘制后立即适合屏幕.您还应该检查最后一个可见行是否完全适合屏幕.

创建Runnable:

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...
        }
    }
};
Run Code Online (Sandbox Code Playgroud)

onCreate()ListView的Handler中将Runnable排队:

listView.post(fitsOnScreen);
Run Code Online (Sandbox Code Playgroud)