android.view.WindowManager $ BadTokenException: - 活动开始时的弹出窗口

时间:2012-07-15 22:15:18

标签: android

我一直在寻找答案,但大多数似乎都指向getApplicationContext()问题,但我没有使用getApplicationContext()。 基本上我试图在启动一个活动时打开一个弹出窗口但是当活动开始时它会因上述错误而关闭。

我写的代码是:

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);
}

希望你们能帮忙,几个小时都在寻找答案,这是你们最后的希望!

1 个答案:

答案 0 :(得分:0)

我的第一个猜测是,您不能在onCreate内显示弹出式窗口。它用于初始化您的应用程序和构建您的布局,但您强制它显示一个弹出窗口。

onStart()是一个更适合展示它的地方。覆盖此功能并在那里显示弹出窗口。如果您更喜欢在onResume()中执行此操作,请注意,用户不仅会在启动应用程序时看到它,还会在导航到另一个活动后返回到该应用程序时看到它。

编辑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);
       }
    });

使用

将ID添加到您的活动和弹出式布局中
android:id="@+id/main_page_layout"

android:id="@+id/popup_layout"
分别为

,以便它们匹配您将在上面的代码中使用的ID。