使用每个项目的侦听器动态创建浮动上下文菜单?

时间:2013-09-08 16:00:35

标签: java android

我已经看到了一些问题要求VB和C#,但Java / Android没有。基本上我有一个值列表,所有数字,我想为用户提供一个删除特定条目的选项。我想要做的是当用户单击“删除条目”按钮时,会出现一个浮动上下文菜单,其中填充了ArrayList条目的选项,它们按顺序显示在列表中。当他们单击菜单中的数字时,它将从ArrayList中删除。

我对菜单创建相当新,但我已经多次通过xml创建了它们。这是我第一次尝试使用不确定数量的项目动态创建浮动菜单。

1 个答案:

答案 0 :(得分:1)

如果从用户体验的角度来看数字列表相当短(即用户不想搜索/过滤列表),则可以使用traditional single-choice list AlertDialog。您只需稍微修改文档中的示例:

final List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);

final CharSequence[] numbers = new CharSequence[list.size()];
for (int i = 0; i < list.size(); i++) {
    numbers[i] = list.get(i).toString();
}

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Remove entry:");
builder.setItems(numbers, new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int which) {
        list.remove(which);
    }
});
builder.create().show();

正如您在文档中看到的那样,setItems方法被重载以接受CharSequence数组。所以基本上,你需要在创建Dialog之前将数字转换为CharSequences。 (String实现CharSequence,因此toString()完成工作。)

OnClickListener中,所选菜单项的索引将作为which传递给onClick方法。由于菜单项索引和列表项索引相同,您可以使用which从实际列表中删除该项。

同样的方法适用于浮点数列表,只需根据区域设置进行格式化。