Android AlertDialog.Builder - 好的 OnClickListener 项目 ID 实践?
Android AlertDialog.Builder - good OnClickListener item id practice?
假设我想使用 AlertDialog.Builder 创建一个简单的对话框。有没有什么好的方法可以在它的 OnClickListener 中摆脱与整数的书面 "by hand" 比较?
我可以做一些常量,但如果有人向菜单添加另一个项目,它仍然需要在 2 个地方进行更改。
final CharSequence[] menuOptions = new CharSequence[]{"one","two","three"};
AlertDialog.Builder builder = new AlertDialog.Builder(MapBrowsingActivity.this);
builder.setTitle("Choose action").
setItems(menuOptions, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (which == 0) {
//do sth;
}
if (which == 1) {
//do sth;
}
if (which == 2) {
//do sth;
}
}
});
builder.create().show();
您可以使用基于 enum
用法的下一个方法。它需要将 enum
转换为 CharSequence
的额外内容,但保证当您或其他开发人员将 add/remove/insert 新菜单应用程序正常工作时。
private void showMenu() {
final Menu[] values = Menu.values();
CharSequence[] items = new CharSequence[values.length];
for (int i = 0; i < values.length; i++) {
items[i] = values[i].toString();
}
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Choose action").
setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Menu value = values[which];
switch (value) {
case Menu1:
break;
case Menu2:
break;
case Menu3:
break;
}
}
});
builder.create().show();
}
private enum Menu {
Menu1,
Menu2,
Menu3
}
你真的无能为力。如果有人更改菜单项,则处理方式也应更改。不过,您可以使用 switch
使其更清晰:
switch(what) {
case 0:
//do sth;
break;
case 1:
//do sth;
break;
case 2:
//do sth;
break;
default:
throw new RuntimeException("item unknown");
}
假设我想使用 AlertDialog.Builder 创建一个简单的对话框。有没有什么好的方法可以在它的 OnClickListener 中摆脱与整数的书面 "by hand" 比较?
我可以做一些常量,但如果有人向菜单添加另一个项目,它仍然需要在 2 个地方进行更改。
final CharSequence[] menuOptions = new CharSequence[]{"one","two","three"};
AlertDialog.Builder builder = new AlertDialog.Builder(MapBrowsingActivity.this);
builder.setTitle("Choose action").
setItems(menuOptions, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (which == 0) {
//do sth;
}
if (which == 1) {
//do sth;
}
if (which == 2) {
//do sth;
}
}
});
builder.create().show();
您可以使用基于 enum
用法的下一个方法。它需要将 enum
转换为 CharSequence
的额外内容,但保证当您或其他开发人员将 add/remove/insert 新菜单应用程序正常工作时。
private void showMenu() {
final Menu[] values = Menu.values();
CharSequence[] items = new CharSequence[values.length];
for (int i = 0; i < values.length; i++) {
items[i] = values[i].toString();
}
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Choose action").
setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Menu value = values[which];
switch (value) {
case Menu1:
break;
case Menu2:
break;
case Menu3:
break;
}
}
});
builder.create().show();
}
private enum Menu {
Menu1,
Menu2,
Menu3
}
你真的无能为力。如果有人更改菜单项,则处理方式也应更改。不过,您可以使用 switch
使其更清晰:
switch(what) {
case 0:
//do sth;
break;
case 1:
//do sth;
break;
case 2:
//do sth;
break;
default:
throw new RuntimeException("item unknown");
}