我正在尝试存储和使用单选警报对话框的选定项目。

到目前为止,这是我的代码:

            final String[] deviceNames = getBTPairedDeviceNames();
        int selpos;

        new AlertDialog.Builder(this)
        .setSingleChoiceItems(deviceNames, 0, null)
        .setPositiveButton("O.K.", new DialogInterface.OnClickListener() {

            public void onClick(DialogInterface dialog, int whichButton) {
                dialog.dismiss();
                int selectedPosition = ((AlertDialog)dialog).getListView().getCheckedItemPosition();
                // Do something useful with the position of the selected radio button

                selpos = selectedPosition;
            }
        })
        .show();

          Toast.makeText(this, "" + selpos, Toast.LENGTH_SHORT) .show();


尝试分配给selpos时出现编译错误。该错误显示为:

“无法引用用不同方法定义的内部类内的非最终变量selpos”

将selpos设置为最终结果会导致错误:

“无法分配最终的局部变量selpos,因为它是用封闭类型定义的”

如何从代码块中获取所选项目的位置?

谢谢

最佳答案

最简单的方法,将变量声明为类中的字段(而不是函数中的字段)。

int selpos; //declare in class scope

public void yourFunction() {

//don't declare here
//int selpos;

    new AlertDialog.Builder(this)
    .setSingleChoiceItems(deviceNames, 0, null)
    .setPositiveButton("O.K.", new DialogInterface.OnClickListener() {

        public void onClick(DialogInterface dialog, int whichButton) {
            dialog.dismiss();
            int selectedPosition = ((AlertDialog)dialog).getListView().getCheckedItemPosition();
            // Do something useful with the position of the selected radio button

            selpos = selectedPosition;
        }
    })
    .show();
}

10-08 14:42