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的代碼,但我的問題是不同的。
此作品(顯示了我輸入的),但它爲什麼不保存到成員變量?我無法在onClick內對文件名稱調用此關鍵字,但我沒有具有該名稱的其他變量。 – Drok
它確實保存,但不能在您調用dialog.show();的相同函數中使用它。因爲它將在用戶點擊對話框中的OK之前執行。你需要做什麼來使用文件名是把所有的代碼放在onClick函數中,或者調用onClick中的另一個函數。 (或者如果我不明白,請詳細說明)。 –
這工作。我把其餘的代碼放在一個私有方法中,並傳入文件名。我可以看到它阻塞了一些東西,因爲我在第二次調用對話框之後設法獲得了第二條日誌語句(使用成員變量)。我不完全理解爲什麼我需要移動它的邏輯。我想一個新的方法會讓代碼在父類或活動中運行,而不是在DialogInterface.OnClickListener()接口中運行,但我仍然認爲我的第一種方法是有意義的。 – Drok