2017-01-02 65 views
1

以下代碼在按鈕的onClick方法中運行並顯示一個對話框。我可以輸入文本並按下確定,但是我的字符串文件名,如Log.d所示,始終爲空。我不懂爲什麼。EditText對話框輸入始終爲空(Android)

如何讓對話框中輸入的文本保存?

我的代碼運行在一個活動(無片段)和字符串文件名和EditText輸入都是類成員變量。

// Get filename from user 
    AlertDialog.Builder dialog = new AlertDialog.Builder(this); 
    dialog.setTitle("Enter filename"); 

    // EditText to get user input 
    this.input = new EditText(this); 
    dialog.setView(input); 

    dialog.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int whichButton) { 
      filename = input.getText().toString(); 
     } 
    }); 

    dialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int whichButton) { 
      // cancelled 
     } 
    }); 
    dialog.show(); 
    Log.d(LOG_TAG, "Filename is : " + filename); 

我基於android prompt user's input using a dialog的代碼,但我的問題是不同的。

回答

0

您嘗試在實際輸入數據之前記錄字符串。 嘗試將日誌放在正面onClick,我認爲你會看到它確實保存。

像這樣:

// Get filename from user 
AlertDialog.Builder dialog = new AlertDialog.Builder(this); 
dialog.setTitle("Enter filename"); 

// EditText to get user input 
this.input = new EditText(this); 
dialog.setView(input); 

dialog.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int whichButton) { 
     filename = input.getText().toString(); 
     Log.d(LOG_TAG, "Filename is : " + filename); 
    } 
}); 

dialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int whichButton) { 
     // cancelled 
    } 
}); 
dialog.show(); 
+0

此作品(顯示了我輸入的),但它爲什麼不保存到成員變量?我無法在onClick內對文件名稱調用此關鍵字,但我沒有具有該名稱的其他變量。 – Drok

+0

它確實保存,但不能在您調用dialog.show();的相同函數中使用它。因爲它將在用戶點擊對話框中的OK之前執行。你需要做什麼來使用文件名是把所有的代碼放在onClick函數中,或者調用onClick中的另一個函數。 (或者如果我不明白,請詳細說明)。 –

+0

這工作。我把其餘的代碼放在一個私有方法中,並傳入文件名。我可以看到它阻塞了一些東西,因爲我在第二次調用對話框之後設法獲得了第二條日誌語句(使用成員變量)。我不完全理解爲什麼我需要移動它的邏輯。我想一個新的方法會讓代碼在父類或活動中運行,而不是在DialogInterface.OnClickListener()接口中運行,但我仍然認爲我的第一種方法是有意義的。 – Drok