我有一个GUI接口,方法public Item selectItem(Item[] items);
返回其中一个项目;我在我的Activity中实现了这个接口,并使用了一个AlertDialog,让用户选择一个Item。这是我的代码:
private Item tempItem;
@Override
public Item selectItem(final Item[] items) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Select an Item");
builder.setItems(toStringArray(items), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int choice) {
tempItem = items[choice];
}
});
builder.setCancelable(false);
builder.show();
return tempItem;
}
tempItem
是一个支持变量,因为我无法返回onClick()
方法中的值。问题是该方法返回null
,因为tempItem
不是喷射设置。有没有更好的解决方案来使用AlertDialog实现此方法?
答案 0 :(得分:1)
我将为您的类实现一个单击侦听器,允许您将onClick用作类方法,从而使用它的变量。
public class YourClass extends Whatever implements DialogInterface.OnClickListener{
private item;
private Item[] items;
private AlertDialog.Builder builder1;
private AlertDialog.Builder builder2;
@Override
public Item selectItem(final Item[] items) {
this.items = items;
AlertDialog.Builder builder1 = new AlertDialog.Builder(this);
builder1.setTitle("Select an Item");
builder1.setItems(toStringArray(items), new DialogInterface.OnClickListener(this));
builder1.setCancelable(false);
builder1.show();
return item;
}
@Override
protected void onClick(DialogInterface dialog, int choice){
if(dialog.equals(builder1)
item = items[choice];
else if(dialog.equals(builder2))
// do what you want for dialog 2
}
}
只是一个选项,但是当我过去不得不做类似的事情时,我就是这样做的。