0

我正在研究 android 项目,我试图显示一个包含CharSequence数组的 AlertDialog,当单击它时,它应该返回字符串。

下面是我正在使用的代码

String fileName = "";
        //Collect the files from the backup location
        String filePath = Environment.getExternalStorageDirectory().getPath() + "/BoardiesPasswordManager";
        File f = new File(filePath);

        File[] files = f.listFiles();
        final CharSequence[] fileNames = new CharSequence[files.length];
        if (files.length > 0)
        {
            for (int i = 0; i < files.length; i++)
            {
                fileNames[i] = files[i].getName();
            }
        }

        String selectedFile = "";
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setTitle("Choose Backup File");
        builder.setItems(fileNames, new DialogInterface.OnClickListener() {

            public void onClick(DialogInterface dialog, int item) {
                fileName = fileNames[item].toString();
            }
        });
        AlertDialog alert = builder.create();
        alert.show();

        return fileName;

如您所见,我试图将文件名设置为数组中的选定项,但 Eclipse 一直说String fileName需要final输入,但显然我无法将其设置为选定字符串的值。如何设置变量以便返回字符串。

感谢您的任何帮助,您可以提供。

4

1 回答 1

1

这里的问题是对何时执行“return fileName”的误解。显然,只有在用户做出选择后执行此代码才有效。但是,它实际上会在之前执行。事实上,它会在你调用 alert.show() 后立即执行。

最好从函数范围中删除 fileName 并在单击事件中添加函数调用,例如:

public void onClick(DialogInterface dialog, int item){
    String fileName = fileNames[item].toString();
    doSomethingWithTheFile(fileName);
}

此外,您的原始函数将不再返回任何内容,它只会设置您的对话框。

于 2012-09-04T20:18:36.993 回答