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;

ご覧のとおり、fileNameを配列内の選択された項目に設定しようとしていますが、Eclipseはそれを型String fileName指定する必要があると言い続けますfinalが、明らかに、選択された文字列の値に設定できません。文字列を返すことができるように変数を設定するにはどうすればよいですか。

あなたが提供できるどんな助けにも感謝します。

4

1 に答える 1

1

ここでの問題は、「returnfileName」がいつ実行されるかについての誤解です。明らかに、ユーザーが選択を行ったにのみこのコードを実行することが有効です。ただし、実際には前に実行されます。実際、alert.show()を呼び出した直後に実行されます。

関数のスコープからfileNameを削除し、クリックイベント内に次のような関数呼び出しを追加することをお勧めします。

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

また、元の関数は何も返さず、ダイアログを設定するだけです。

于 2012-09-04T20:18:36.993 に答える