Android - Пользовательский диалог - Не удается получить текст из EditText
У меня проблема с настраиваемым диалогом.
Мой диалог состоит из TextView, EditText и кнопки "OK". После нажатия OK, он должен получить текст из поля EditText и назначить его переменной String "name", определенной в Activity.
Кажется, что все работает, никаких ошибок и т.д. Однако "текст" всегда является пустой строкой.
Я прочитал некоторые темы о таких проблемах, однако я не совсем уверен, какие корректировки я должен сделать здесь.
Я совершенно новичок в программировании на Android, поэтому я был бы признателен, если бы sb мог объяснить мне эту проблему. Спасибо заранее.
final Dialog dialog = new Dialog(MyActivity.this);
dialog.setContentView(R.layout.custom_dialog);
dialog.setTitle("Title");
final View layout = View.inflate(this, R.layout.custom_dialog, null);
Button button = (Button) dialog.findViewById(R.id.dialog_ok);
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
EditText edit=(EditText)layout.findViewById(R.id.dialog_edit);
String text=edit.getText().toString();
name=text;
dialog.dismiss();
}
});
dialog.show();
}
Ответы
Ответ 1
Вы раздуваете макет, где он не нужен. Я исправил ваш код, как вы видите, я удалил вашу линию, где он раздул и изменил строку, где вы пытаетесь найти представление EditText.
final Dialog dialog = new Dialog(MyActivity.this);
dialog.setContentView(R.layout.custom_dialog);
dialog.setTitle("Title");
Button button = (Button) dialog.findViewById(R.id.dialog_ok);
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
EditText edit=(EditText)dialog.findViewById(R.id.dialog_edit);
String text=edit.getText().toString();
dialog.dismiss();
name=text;
}
});
dialog.show();
Ответ 2
Если вы хотите раздуть XML файл в диалоговом окне для создания пользовательской версии, вы можете использовать следующий код, который получает два ввода от пользователя
LayoutInflater linf = LayoutInflater.from(this);
final View inflator = linf.inflate(R.layout.twoinputs, null);
AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setTitle("Tilte");
alert.setMessage("Message");
alert.setView(inflator);
final EditText et1 = (EditText) inflator.findViewById(R.id.editText1);
final EditText et2 = (EditText) inflator.findViewById(R.id.editText2);
alert.setPositiveButton("ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton)
{
String s1=et1.getText().toString();
String s2=et2.getText().toString();
//do operations using s1 and s2 here...
}
});
alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
dialog.cancel();
}
});
alert.show();
Ответ 3
Альтернатива matsjoe и кришна (оба работают):
builder.setPositiveButton(R.string.signin, new DialogInterface.OnClickListener() {
//@Override
public void onClick(DialogInterface dialog, int id) {
// sign in the user ...
Dialog dialogObj =Dialog.class.cast(dialog);
EditText etUsr=(EditText) dialogObj.findViewById(R.id.username_id_value);
userStr = etUsr.getText().toString();
}
}
);
Кф
Ответ 4
EditText editText = (EditText) findViewById(R.id.edit_message);
String message = editText.getText().toString();
http://developer.android.com/training/basics/firstapp/starting-activity.html