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

时间:2012-11-26 20:31:38

标签: android listview

  

可能重复:
  Android: using notifyDataSetChanged and getLastVisiblePosition - when the listView is actually updated?

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

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

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

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

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

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

我正在使用API​​级别10开发。

有什么建议吗?

2 个答案:

答案 0 :(得分:22)

在Runnable中将getLastVisiblePosition()getCount()进行比较,看看整个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...
        }
    }
};

onCreate()中,在ListView的处理程序中将Runnable排队:

listView.post(fitsOnScreen);

答案 1 :(得分:0)

你为什么要找问题?而不是你的想法,你可以使用3种布局:

  1. 小部件(如有必要) - 标题
  2. ListView - 主要布局
  3. ImageView或其他小部件 - 页脚

  4. ListView lv = (ListView) findViewById(R.id.listView);
    View header = getLayoutInflater().inflate(R.layout.header_layout, null);
    View footer = getLayoutInflater().inflate(R.layout.foorer_layout, null);
    lv.addHeaderView(headerComment);
    lv.addFooterView(footerComment);