You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中LinearLayout仅显示ListView单个子项问题排查

解决ListView仅显示单个子项的问题

我看了你的布局和代码,问题主要出在ListView的高度设置以及外层布局的高度约束上,另外适配器里也有个小细节需要修正,下面一步步来解决:

1. 修复ListView的布局高度

你的ListView设置了android:layout_height="wrap_content",而它所在的LinearLayoutDetails样式也用了wrap_content作为高度。对于ListView来说,wrap_content在很多场景下只会计算第一个列表项的高度,导致只能显示一行内容。

修改你的ListView布局:

<ListView 
    android:id="@+id/ov_list_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/> <!-- 将wrap_content改为match_parent -->

如果这个LinearLayout里除了ListView还有其他控件,那可以用layout_weight让ListView占据剩余空间:

<ListView 
    android:id="@+id/ov_list_view"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"/>

同时,建议把LinearLayoutDetails的android:layout_height改成match_parent,确保它能填满外层布局的空间:

<style name="LinearLayoutDetails">
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">match_parent</item> <!-- 这里改成match_parent -->
    <item name="android:layout_marginLeft">15dp</item>
    <item name="android:layout_marginRight">15dp</item>
    <item name="android:gravity">right</item>
    <item name="android:orientation">vertical</item>
</style>

2. 修正适配器的getItem方法

你的适配器里getItem方法返回的是索引i,这不符合BaseAdapter的规范,应该返回对应位置的数据对象:

@Override
public Object getItem(int i) {
    return data.get(i); // 原来返回i,现在改成返回对应位置的Unit对象
}

另外,你的getView方法代码没写完,这里补全完整的绑定逻辑示例:

@Override
public View getView(int i, View view, ViewGroup viewGroup) {
    View v = view;
    ViewHolder viewHolder = new ViewHolder();
    if (v == null){
        v = inflater.inflate(R.layout.uni, viewGroup, false); // 确保这里填写正确的列表项布局id
        viewHolder.name = v.findViewById(R.id.name);
        viewHolder.value = v.findViewById(R.id.value);
        v.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder) v.getTag();
    }
    // 绑定数据到控件
    Unit unit = (Unit) getItem(i);
    viewHolder.name.setText(unit.getName());
    viewHolder.value.setText(unit.getValue());
    return v;
}

3. 额外检查点

  • 确认你的data集合里确实有多个数据项,可以在getCount方法里加个Log,看看返回的数值是否符合预期。
  • 列表项的布局高度是固定的40dp,这个没问题,但要确保没有设置visibility为gone或者其他影响显示的属性。

按照上面的步骤修改后,ListView应该就能正常显示所有子项了。

内容的提问来源于stack exchange,提问作者user7454578

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:26:55