12

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

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

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

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

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

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

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

我正在 API 级别 10 上开发。

有什么建议么?

4

2 回答 2

22

getLastVisiblePosition()与Runnable 中的比较,getCount()以查看整个 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...
        }
    }
};

onCreate()ListView 的处理程序中排队您的 Runnable:

listView.post(fitsOnScreen);
于 2012-11-26T21:07:25.260 回答
0

你为什么要找问题?代替您的想法,您可以使用 3 种布局:

  1. 必要时的小部件 - 标题
  2. ListView - 主要布局
  3. ImageView 或其他小部件 - 页脚


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);
于 2012-11-26T21:02:58.030 回答