2012-09-04 61 views
0

我正在android項目上工作,我試圖顯示一個AlertDialog,它包含一個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類型,但顯然我無法將其設置爲所選字符串的值。我怎樣才能設置變量,以便我可以返回字符串。

感謝您提供的任何幫助。

回答

1

這裏的問題是什麼時候'return fileName'會被執行的一個誤解。顯然只有在用戶選擇了之後才能執行此代碼。但是,它實際上會執行之前。實際上,它會在您調用alert.show()後立即執行。

更好

會從您的函數的範圍中刪除文件名,並添加點擊事件裏面的函數調用,這樣的:

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

此外,原來的功能將不再返回任何東西,它只是設置你的對話框。