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);
}
}
});