前言

最近又开始捣鼓APP,发现许多API、Class都忘记怎么用了。在尝试使用AlertDialog实现弹出菜单时,结果直接crash。查了半天,终于解决了问题,并决定记录下实现过程和遇到的问题。

1 实现代码

```java

// 创建AlertDialog.Builder对象

new AlertDialog.Builder(getApplicationContext());

// 设置对话框的标题

builder.setTitle("菜单");

// 设置对话框的布局

builder.setView(R.layout.dialog_layout);

// 获取ListView控件

ListView listView = (ListView) builder.getWindow().findViewById(R.id.listview);

// 设置ListView的适配器

ArrayAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, items);

listView.setAdapter(adapter);

// 设置点击事件

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

@Override

public void onItemClick(AdapterView parent, View view, int position, long id) {

// 根据position获取选中的菜单项

String selectedItem = items[position];

// TODO: 根据选中的菜单项执行相应操作

}

});

// 显示对话框

builder.show();

```

2 实现效果

通过上述代码,我们可以实现一个简单的弹出菜单。用户可以在菜单中选择不同的选项,点击确定后,会根据选中的菜单项执行相应的操作。

3 增加数据项的效果

如果需要在弹出菜单中增加更多的数据项,可以通过修改`ArrayAdapter`的构造方法来实现。例如,将以下代码中的`items`数组替换为包含更多数据的数组:

```java

String[] items = new String[]{"选项1", "选项2", "选项3", "选项4", "选项5"};

```

这样就可以在弹出菜单中显示更多的数据项了。

4 遇到的错误及解决方案

在使用`new AlertDialog.Builder(getApplicationContext())`时,程序直接崩溃。经过查找资料和尝试,发现问题出在未设置对话框的窗口属性上。因此,需要添加以下代码来设置对话框的窗口属性:

```java

AlertDialog dialog = builder.create();

if (dialog != null) {

WindowManager.LayoutParams layoutParams = dialog.getWindow().getAttributes();

layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; // 设置宽度为屏幕宽度

dialog.getWindow().setAttributes(layoutParams); // 将修改后的窗口属性应用到对话框上

} else {

Log.e("TAG", "对话框创建失败");

}

```