Если вы подумаете о ситуации, вы поймете, почему.Когда вы вызываете new DemoDialog(this)
, вы выполняете весь код в конструкторе.После этого вы возвращаете его из onCreateDialog
, и Android делает свое волшебство.Если вы пытаетесь получить владельца из конструктора, Android еще не подключил его, поэтому у вас еще нет владельца.
Так что вы можете сделать одно из следующих действий:
public class DemoDialog extends Dialog {
public DemoDialog(Context context) {
super(context);
// chances of context not being an activity is very low, but better to check.
Activity owner = (context instanceof Activity) ? (Activity)context : null;
if (owner != null) {
// owner activity is defined here
}
}
public void onAttachedToWindow() {
super.onAttachedToWindow();
// getOwnerActivity() should be defined here if called via showDialog(), so do the related init here
Activity owner = getOwnerActivity();
if (owner != null) {
// owner activity defined here
}
}
}
Обратите внимание, чтовторой метод предпочтительнее, потому что