1

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

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

            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,因为它是在封闭类型中定义的”

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

谢谢

4

3 回答 3

1

正是它所说的。所以改成

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

            final int selpos = selectedPosition;

制作变量final并将其移动到onClick(). 然后根据你需要用它做什么,你可以将它发送到另一个要使用的函数

于 2013-05-29T15:42:41.210 回答
1

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

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();
}
于 2013-05-29T15:45:15.763 回答
0

将变量selpos作为主类(扩展活动)字段,以便您可以从该类内的任何位置访问该变量。

例子:

class ABC extends Activity
{
...
int selpos;
...
}
于 2013-05-29T15:46:09.060 回答