列表视图高度仅对第一个项目返回零

时间:2014-02-06 07:58:06

标签: android listview android-listview listitem

我试图在运行时获取列表视图高度以使项目适合屏幕高度。

以下是我的代码:在我的getView()

int totalHeight = activity.getListView().getHeight();
            int rowHeight = totalHeight / getCount(); // Divide by number of items.
            activity.getListView().setScrollContainer(false);
            activity.getListView().setVerticalScrollBarEnabled(false);
            convertView.setMinimumHeight(rowHeight);

在我的活动中,我以编程方式创建了宽度和高度均为MATCH_PARENT的列表视图。

但我尝试调试并发现只有列表视图高度为0的第一项,但对于其余项目,它给我适当的高度。

为什么这样 ?如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

这很可能是由于尚未创建视图。在这种情况下,高度为0。

您可以使用以下内容获取视图的高度:

final ListView listView = activity.getListView();
ViewTreeObserver vto = listView.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

    @Override
    public void onGlobalLayout() {
        int totalHeight = listView.getHeight();
        int rowHeight = totalHeight / getCount(); // Divide by number of items.
        listView.setScrollContainer(false);
        listView.setVerticalScrollBarEnabled(false);
        convertView.setMinimumHeight(rowHeight);

        ViewTreeObserver obs = listView.getViewTreeObserver();    
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            obs.removeOnGlobalLayoutListener(this);
        } else {
            obs.removeGlobalOnLayoutListener(this);
        }
    }

});

检查Build.VERSION的原因是在Jelly Bean之前的SDK中,方法的名称不同(OnGlobalLayout vs GlobalOnLayout)

答案 1 :(得分:0)

这种情况正在发生,因为当第一项的getView被调用时,listview的高度未确定。

您需要使用ViewTreeObserver为您提供布局更改事件,并且您可以获得高度。