1

我一直在寻找这个问题的答案,但大多数似乎都指向 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);
}

希望你们能提供帮助,一直在寻找答案几个小时,所以这是我最后的希望!

4

1 回答 1

1

我的第一个猜测是你不允许在里面显示一个弹出窗口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 匹配。

于 2012-07-15T23:09:05.173 回答