Android 列表视图高度仅为第一项返回零

Android 列表视图高度仅为第一项返回零,android,listview,android-listview,listitem,Android,Listview,Android Listview,Listitem,我试图在运行时获得列表视图的高度,以使项目适合屏幕的高度 这是我的代码:在我的getView()中 在我的活动中,我通过编程创建了列表视图,其宽度和高度均为匹配父视图 但我试着调试,发现只有第一个项目的列表视图高度是0,而其余项目的列表视图高度是合适的 为什么呢 ? 如何修复此问题?很可能是因为视图尚未创建。在这种情况下,高度将为0 可以使用以下方法获取视图的高度: final ListView listView = activity.getListView(); ViewTreeObserve

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

这是我的代码:在我的
getView()中

在我的活动中,我通过编程创建了列表视图,其宽度和高度均为匹配父视图

但我试着调试,发现只有第一个项目的列表视图高度是0,而其余项目的列表视图高度是合适的

为什么呢
? 如何修复此问题?

很可能是因为视图尚未创建。在这种情况下,高度将为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与GlobalOnLayout)

这是因为调用第一项的
getView
时,未确定
列表视图的高度


您需要使用
ViewTreeObserver
为您提供一个布局更改事件,您可以从中获得高度。

我需要在哪里添加此内容?在getView()中,这里的电视是什么?为什么会出现这种情况(Build.VERSION.SDK\u INT>=Build.VERSION\u CODES.JELLY\u BEAN)?此外,我无法在OnGloballYouTube中设置convertview您是在片段还是在活动中执行此操作?我有一个内部类作为适配器,我在FragmentActivity中使用此列表取决于您想要完成的任务。如果是在膨胀视图之后,可以将其放在onCreate上
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);
        }
    }

});