Я пытаюсь создать пользовательский AlertDialog
, расширяя класс AlertDialog
.
Как обычно, я настраиваю диалог внутри его метода onCreate()
.Или я пытаюсь сделать это:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setTitle("Some title");
this.setButton(BUTTON_POSITIVE, "Click me", (DialogInterface.OnClickListener)null);
final FrameLayout custom = (FrameLayout) this
.findViewById(android.R.id.custom);
custom.addView(this.getLayoutInflater().inflate(R.layout.mydlg, null),
LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
}
Теперь, когда дело доходит до отображения экземпляра этого диалогового окна, ничего не отображается . Текущий Activity
исчезает и теряет фокус, но ни один пиксель моего диалога не отображается.Нажатие Back возвращает Activity
обратно на передний план , указывая мне, что на самом деле отображается , но только полностью пустой.
Однако, когда я создаю AlertDialog
и использую, например, dlg.setButton(BUTTON_POSITIVE, "Click me", (DialogInterface.OnClickListener)null);
, диалоговое окно отображается с соответствующей кнопкой.
Даже когда я настраиваю свой настраиваемый диалог в его конструкторе, используя тот же код, что и выше, все кажетсяработать нормально.
Теперь, как это может быть?Почему я не могу инициализировать мой диалог в методе onCreate()
?Разве вы не должны инициализировать любой элемент GUI?Чего мне не хватает?
РЕДАКТИРОВАТЬ
Обратите внимание, что что-то"показано", затухая в действии и снимая с нее фокус.Просто он кажется совершенно пустым / невидимым.
Вот еще одна попытка:
this.setTitle("Some title");
this.setButton(BUTTON_POSITIVE, "Click me", (DialogInterface.OnClickListener)null);
final View v = this.getLayoutInflater().inflate(R.layout.mydlg, null);
this.setView(v);
Эти точные строки делают работают, когда помещаются в конструктор моего диалога.
Эти точные строки не работают, когда помещены в мой диалог onCreate()
.
Что здесь происходит?!
Как правило, я не должен делатьэто в onCreate()
?- Могу ли я столкнуться с проблемой, если вместо этого прибегну к вышеуказанной инициализации в конструкторе?(Во всяком случае, это не кажется мне слишком чистым.)