Класс Android, который расширяет диалог, как очистить TextViews перед его отображением - PullRequest
1 голос
/ 17 марта 2010

У меня есть класс, который расширяет android.app.Dialog, макет выполняется в XML-файле, а настройка (прослушиватели кнопок и т. Д.) Выполняется с помощью метода onCreate. Моя проблема заключается в том, что всякий раз, когда диалоговое окно отображается, затем закрывается и отображается снова, редактируемые текстовые представления по-прежнему заполняются информацией, которая отображалась ранее. Каков общий способ очистки этих текстовых полей? Помните - это отдельный класс, который расширяет Dialog - поэтому нет такого «onDialogCreate», как у Activity.

Или, возможно, я расширяю не тот класс? Просто выполняется много обработки, и мы не хотим, чтобы весь код был в основной активности. Я хотел бы, чтобы это было в отдельном классе. Я попытался расширить AlertDialog, но он не создает границы, как это делает Dialog. Любая помощь будет отличной.

Диалог показывается через Активность:

    protected Dialog onCreateDialog(int id) {
        switch(id){
            case DIALOG_NEW_SAFE:
                return(new NewSafeDialog(this));
            default:
                return(null);
        }
    }

Ответы [ 3 ]

3 голосов
/ 17 марта 2010

onCreateDialog(..) кэширует диалоговое окно, что означает, что тот же экземпляр используется повторно.

3 способа исправить нежелательное поведение с моей головы:

  1. Переопределите onPrepareDialog(..), используйте findViewById(..), чтобы получить то, что вы хотите очистить, очистите его.
  2. Не полагайтесь на управляемые диалоги вообще, делайте новые NewSafeDialog(this).show() каждый раз, когда вы хотите показать диалог.
  3. Добавьте onCancelListener(..), onDismissListener(..) в свой пользовательский диалог, который вызовет метод для очистки самого себя.
2 голосов
/ 02 декабря 2010

Хороший способ создать диалог - это использовать showDialog (), так как вы его не изменяли.Хороший и простой способ принудительно удалить диалоговое окно для повторного вызова кода создания:

void removeDialog (int id)

Так что если вы просто выполните следующее, эторабота;)

removeDialog(DIALOG_NEW_SAFE);
showDialog(DIALOG_NEW_SAFE);
0 голосов
/ 17 марта 2010

Попробуйте очистить текст в конструкторе NewSafeDialog, т.е. в вашем диалоговом классе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...