【问题标题】:Android AlertDialog item selectionAndroid AlertDialog 项目选择
【发布时间】:2014-05-30 02:27:29
【问题描述】:

我有一个带有 public Item selectItem(Item[] items); 方法的 GUI 界面,它返回其中一项;我在我的 Activity 中实现了这个接口,并使用了一个 AlertDialog 让用户选择一个项目。这是我的代码:

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 实现此方法是否有更好的解决方案?

【问题讨论】:

  • 我尝试在 return 语句之前添加 while(tempItem==null) {}; 但随后 UI 冻结...

标签: java android user-interface interface android-alertdialog


【解决方案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
    }
}

只是一个选择,但当我过去不得不做类似的事情时,我就是这样做的。

【讨论】:

  • 如果我有多个对话框,如何查看点击了哪一个?
  • 此解决方案的另一个问题是,我无法在onClick 方法中访问items...
  • @VoidCats 当然可以,只需创建一个可以在整个班级中使用的 items 变量并将其设置在您的 selectItem 班级中。像this.items = items;然后,您可以使用 onClick 变量来确定单击的内容,甚至可以从多个对话框中确定。有时间我会更新我的帖子。
  • @VoidCats 你在多对话框问题上可能是对的,我认为传递的对话框变量包含某个版本的唯一标识符,但我似乎找不到。
  • @VoidCatz 没关系,我想通了并编辑了我的答案。另外,很抱歉在我的回复中输入了错误的姓名
猜你喜欢
  • 2013-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-12
相关资源
最近更新 更多