android.view.WindowManager $ BadTokenException:无法添加窗口 - 令牌null无效

时间:2013-07-22 11:58:49

标签: java android

每当我尝试启动窗口类时,都会收到此错误。我正在使用单独的类,而不仅仅是我的游戏类中的一个方法,因为我需要在该弹出窗口中禁用后退按钮。我用一个按钮叫这个班。如果我在我的游戏类中使用它,这个代码工作正常,但不是在单独的类中。这是我的代码:

public class Popup_pogresno extends Activity implements OnClickListener{

    private PopupWindow pwindow;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        LayoutInflater layoutInflater 
         = (LayoutInflater)Popup_pogresno.this
          .getSystemService(LAYOUT_INFLATER_SERVICE);  
        View popupView = layoutInflater.inflate(R.layout.popup, null);  
                 pwindow  = new PopupWindow(popupView, 300, 170, true);

                 Button btnDismiss = (Button)popupView.findViewById(R.id.bPopupOK);
                 btnDismiss.setOnClickListener(new Button.OnClickListener(){

         public void onClick(View v) {
          // TODO Auto-generated method stub
             pwindow.dismiss();
         }});

                 pwindow.showAtLocation(popupView, Gravity.CENTER, 0, 0);

       }

    public void onClick(View v) {
        // TODO Auto-generated method stub

    }
    @Override
    public void onBackPressed() {

    }
}

1 个答案:

答案 0 :(得分:13)

您未在setContentView(R.layout.myLayout)方法中致电onCreate(Bundle)。在super.onCreate(savedInstanceState);之后立即调用。

这是来自Android开发者网站上的“活动资源”页面:

  

Activity几乎所有子类都有两种方法   实现:

     

onCreate(Bundle)是初始化活动的地方。最重要的是,在这里你通常会用a调用setContentView(int)   布局资源定义您的UI,并使用findViewById(int)来   检索该UI中需要与之交互的小部件   编程。

     

onPause()是您处理离开活动的用户的地方。最重要的是,此时用户所做的任何更改都应该是   已提交(通常是持有数据的ContentProvider)。

修改1:

替换:

pwindow.showAtLocation(popupView, Gravity.CENTER, 0, 0);

使用:

new Handler().postDelayed(new Runnable(){

    public void run() {
        pwindow.showAtLocation(popupView, Gravity.CENTER, 0, 0);
    }

}, 100L);