Я искал ответ на это, но большинство из них, похоже, указывает на проблемы getApplicationContext(), но я не использую getApplicationContext(). В основном я пытаюсь открыть всплывающее окно при запуске какой-либо операции, но когда действие начинается, принудительное закрытие с указанной выше ошибкой.
Код im имеет письменность:
protected void onCreate(Bundle paramBundle) {
super.onCreate(paramBundle);
setContentView(R.layout.installguides_menu);
setTitleFromActivityLabel(R.id.title_text);
btn_Back = (Button) findViewById(R.id.btn_Back);
btn_Back.setOnClickListener (btn_Back_onClick);
btn_Ubuntu10Guide = (Button) findViewById(R.id.btn_Ubuntu10Guide);
btn_Ubuntu12Guide = (Button) findViewById(R.id.btn_Ubuntu12Guide);
btn_BacktrackGuide = (Button) findViewById(R.id.btn_BacktrackGuide);
btn_DebianGuide = (Button) findViewById(R.id.btn_DebianGuide);
btn_Ubuntu10Guide .setOnClickListener (btn_Ubuntu10Guide_onClick);
btn_Ubuntu12Guide .setOnClickListener (btn_Ubuntu12Guide_onClick);
btn_BacktrackGuide .setOnClickListener (btn_BacktrackGuide_onClick);
btn_DebianGuide .setOnClickListener (btn_DebianGuide_onClick);
LayoutInflater layoutInflater = (LayoutInflater)getBaseContext().getSystemService(LAYOUT_INFLATER_SERVICE);
View popupView = layoutInflater.inflate(R.layout.donation_popup, null);
final PopupWindow popupWindow = new PopupWindow(
popupView,
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT);
Button btnDismiss = (Button)popupView.findViewById(R.id.dismiss);
btnDismiss.setOnClickListener(new Button.OnClickListener(){
public void onClick(View v) {
popupWindow.dismiss();
}});
popupWindow.showAsDropDown(btn_Ubuntu10Guide, 50, -30);
}
Надеюсь, что вы, ребята, можете помочь, охотились за часами, чтобы ваша последняя надежда!
Прежде всего я предполагаю, что вам запрещено показывать всплывающее окно onCreate
. Он предназначен для инициализации вашего приложения и построения вашего макета, но вы вынуждаете его отображать всплывающее окно.
onStart()
- это более подходящее место, чтобы показать его. Переопределите эту функцию и покажите свое всплывающее окно. Если вы предпочитаете делать это в onResume(), обратите внимание, что пользователь увидит это не только при запуске приложения, но и при возврате к нему после перехода к другому действию.
EDIT 2: попробуйте это для создания всплывающего окна onStart или onCreate:
LayoutInflater inflater = (LayoutInflater)
this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
PopupWindow pw = new PopupWindow(
inflater.inflate(findViewById(R.id.popup_layout), null, false),
100,
100,
true);
// delaying popup until after all application initialization is done
findViewById(R.id.main_page_layout).post(new Runnable() {
public void run() {
pw.showAtLocation(findViewById(R.id.main_page_layout), Gravity.CENTER, 0, 0);
}
});
Добавьте идентификатор в свою активность и всплывающие макеты, используя
android:id="@+id/main_page_layout"
а также
android:id="@+id/popup_layout"
соответственно, чтобы они соответствовали идентификатору, который вы будете использовать в коде выше.