Получение значения EditText, содержащегося в пользовательском диалоговом окне
Таким образом, я создал пользовательское диалоговое окно в своем приложении, которое содержит поле EditText, специально отформатированное для чисел. У меня есть код, настроенный для запуска диалога, когда пользователь нажимает кнопку. Проблема, с которой я сталкиваюсь, заключается в том, что когда пользователь подтверждает введенную им информацию, я получаю ошибку, подобную этой:
java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference
Есть идеи, что я могу сделать неправильно? Вот полный код для моего диалогового окна inflater и обработчиков нажатия кнопок.
public Dialog onCreateDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
// Get the layout inflater
LayoutInflater inflater = this.getLayoutInflater();
Log.i("INFO","Creating Dialog...");
// Inflate and set the layout for the dialog
// Pass null as the parent view because its going in the dialog layout
builder.setView(inflater.inflate(R.layout.goaldialog, null))
// Add action buttons
.setPositiveButton(R.string.SetAGoalButton, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
EditText et = (EditText) findViewById(R.id.GoalChooser);
Integer goalNumber = Integer.parseInt(et.getText().toString());
Log.i("INFO",Integer.toString(goalNumber));
dialog.dismiss();
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.dismiss();
}
});
builder.show();
return builder.create();
}
Я новичок в android и Ява, так что помощь будет оценена.
UPDATE ответ intrepidkarthi решил мою первоначальную проблему, но теперь строка, которая возвращается, выглядит так:
07-22 14:13:43.687 29972-29972/com.collusion.serviceassistant D/INFO﹕ [ 07-22 14:13:43.687 29972:29972 D/AndroidRuntime ]
Shutting down VM
Я получаю текст из EditText, используя это:
String goalNumberString = String.valueOf(et.getText());
5 ответов:
Попробуйте это.
public Dialog onCreateDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(this); // Get the layout inflater LayoutInflater inflater = this.getLayoutInflater(); Log.i("INFO","Creating Dialog..."); View view = inflater.inflate(R.layout.goaldialog, null); // Inflate and set the layout for the dialog // Pass null as the parent view because its going in the dialog layout builder.setView(view) // Add action buttons .setPositiveButton(R.string.SetAGoalButton, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { EditText et = (EditText)view.findViewById(R.id.GoalChooser); Integer goalNumber = Integer.parseInt(et.getText().toString()); globalVariable = goalNumber; Log.i("INFO",Integer.toString(goalNumber)); dialog.dismiss(); } }) .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.dismiss(); } }); builder.show(); return builder.create(); }
Захватите экземпляр представления в переменную при использовании setView (), затем вы можете использовать findViewById для получения EditText:
final View view=inflater.inflate(R.layout.goaldialog, null); builder.setView(view) .setPositiveButton(R.string.SetAGoalButton, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { EditText et = (EditText)view.findViewById(R.id.GoalChooser); Integer goalNumber = Integer.parseInt(et.getText().toString()); Log.i("INFO",Integer.toString(goalNumber)); dialog.dismiss(); } })
Это неверная инструкция:
EditText et = (EditText)onCreateDialog().findViewById(R.id.GoalChooser);Пример:
mEdit = (EditText)findViewById(R.id.edittext); String content = mEdit.getText().toString();
EditText et = (EditText)onCreateDialog().findViewById(R.id.GoalChooser);Запишите это вот так:
public Dialog onCreateDialog() { final EditText et = (EditText) findViewById(R.id.GoalChooser);Это работает? я просто предполагаю, что проблема в том, что ваш EditText равен нулю, поскольку вы ссылаетесь на него из другого контекста (вы не используете контекст действия для создания экземпляра этого редактируемого текста).
Когда мы используем надуватель.надуваем из макета xml-файл, нам нужно добавить представление перед findViewById.
View view = inflater.inflate(R.layout.goaldialog, null);Полей EditText Эт = (полей EditText)смотреть.команду findViewById(Р. ИД.GoalChooser);
Comments