我有一个GUI界面,方法为public Item selectItem(Item[] items);
,返回其中一个项;我在"活动"中实现了这个界面,并使用了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实现此方法?
我会为您的类实现一个点击监听器,它允许您将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
}
}
这只是一种选择,但这就是我过去不得不做类似事情时的做法。