#android #android-alertdialog
#Android #android-alertdialog
Вопрос:
У меня небольшая проблема с AlertDialog
моим приложением. Я показываю AlertDialog
, чтобы пользователь мог изменить текст кнопки, которую он только что нажал. Когда я делаю это в первый раз, проблем нет, но если я снова нажму кнопку, мое приложение выйдет из строя с исключением в названии. Вот код, который я использую :
public void createDialog(){
new AlertDialog.Builder(Settings.this)
.setTitle("Stampii Server Name")
.setView(input)
.setPositiveButton("Set Name", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
String serverName = input.getText().toString();
server.setText(serverName);
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
}).show();
}
server.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
createDialog();
}
});
Есть идеи, как я могу решить эту проблему? Я рассмотрел вопросы, подобные этому, но не могу найти рабочего решения.
Заранее спасибо!
Комментарии:
1. Проверьте, в какой строке происходит сбой в методе CreateDialog..
Ответ №1:
.setView(input)
Переменная «input» не создается в методе и каждый раз добавляется в новое диалоговое окно. Это означает, что каждый раз, когда вы вызываете свой метод create, вы пытаетесь добавить нового родителя к тому же объекту. Вам потребуется новый «ввод» каждый раз, когда вы создаете диалоговое окно, или вы можете использовать одно и то же диалоговое окно снова и снова.
Комментарии:
1. Я забыл о
EditText
. Большое спасибо!2. Нет проблем. Я рад помочь.
Ответ №2:
Однажды у меня была похожая проблема. Я использовал ShowDialog (идентификатор int, аргументы пакета) и реализовал
protected Dialog onCreateDialog(int id,Bundle args)
{
switch(id)
{
case ...:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setPositive...
return builder.create();
}
}
Моя ошибка заключалась в том, что мне пришлось использовать removeDialog(int id) перед созданием нового диалогового окна, поскольку Android каким-то образом кэширует диалоговое окно и не вызывает onCreateDialog() каждый раз, когда вы вызываете ShowDialog() .
Итак, мое решение вызывало
removeDialog(id);
showDialog(id,args);
и изменение onCreateDialog() путем удаления всех возможных диалоговых окон перед оператором switch, чтобы избежать конфликтов с любым другим кэшированным диалогом.