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

Android(Java)中Dialog内ListView不显示问题求助

自定义带ListView的Dialog不显示的排查与修复步骤

1. 检查Dialog布局(dialog_time_picker.xml)的ListView配置

  • 确保ListView宽高设置合理,避免因尺寸问题导致不可见,示例正确配置:
    <ListView
        android:id="@+id/list_view_days"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="8dp"/>
    
  • 确认未设置android:visibility="gone"属性。

2. 验证DayAdapter的核心方法实现

继承BaseAdapter必须保证以下方法逻辑正确,尤其是getCount():

public class DayAdapter extends BaseAdapter {
    private List<String> mDayList;
    private LayoutInflater mInflater;

    public DayAdapter(Context context, List<String> dayList) {
        mDayList = dayList;
        mInflater = LayoutInflater.from(context);
    }

    @Override
    public int getCount() {
        // 必须返回数据源真实长度,返回0会直接导致ListView空白
        return mDayList != null ? mDayList.size() : 0;
    }

    @Override
    public Object getItem(int position) {
        return mDayList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.custom_date_list_view, parent, false);
            holder = new ViewHolder();
            holder.dayText = convertView.findViewById(R.id.tv_day);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.dayText.setText(mDayList.get(position));
        return convertView;
    }

    static class ViewHolder {
        TextView dayText;
    }
}

3. 规范Dialog的创建与ListView绑定流程

在TaskInputActivity中按顺序完成布局加载、控件绑定、数据源填充、Adapter设置:

private void showCustomDatePickerDialog() {
    Dialog dialog = new Dialog(this);
    View dialogView = LayoutInflater.from(this).inflate(R.layout.dialog_time_picker, null);
    dialog.setContentView(dialogView);

    ListView listView = dialogView.findViewById(R.id.list_view_days);
    // 填充测试数据,确保数据源非空
    List<String> dayData = new ArrayList<>();
    dayData.add("周一");
    dayData.add("周二");
    dayData.add("周三");
    dayData.add("周四");
    dayData.add("周五");

    DayAdapter adapter = new DayAdapter(this, dayData);
    listView.setAdapter(adapter);

    // 可选:调整Dialog窗口大小,避免因窗口过小遮挡内容
    Window window = dialog.getWindow();
    if (window != null) {
        WindowManager.LayoutParams params = window.getAttributes();
        params.width = WindowManager.LayoutParams.MATCH_PARENT;
        params.height = WindowManager.LayoutParams.WRAP_CONTENT;
        window.setAttributes(params);
    }

    dialog.show();
}

4. 检查子项布局(custom_date_list_view.xml)

确保子项根视图尺寸设置正确,示例:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/tv_day"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="16dp"
    android:textSize="16sp"/>

5. 额外排查点

  • 若数据源为动态加载,需在数据更新后调用adapter.notifyDataSetChanged()。
  • 检查Dialog布局中是否有其他View设置match_parent覆盖了ListView。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 00:12:28