从onCreate调用Android弹出窗口

3
private void loadingPopup() {
    LayoutInflater inflater = this.getLayoutInflater();
          View layout = inflater.inflate(R.layout.loading_dialog, null);

        PopupWindow windows = new PopupWindow(layout , 300,300,true);
       windows.setFocusable(false);
          windows.setTouchable(true); 
          windows.setOutsideTouchable(true);
          windows.showAtLocation(layout,Gravity.CENTER, 0, 0);

}

当在oncreate()方法中调用loadingPopup()方法时,发生了异常。请问您能帮忙吗?


1
你能发布日志吗? - Nermeen
你需要发布异常是什么? - Anuj
02-06 15:36:12.140: E/AndroidRuntime(17670): Śú®com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)Ś§Ą 02-06 15:36:12.140: E/AndroidRuntime(17670): Śú®com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)Ś§Ą 02-06 15:36:12.140: E/AndroidRuntime(17670): Śú®dalvik.system.NativeStart.main(Native Method)Ś§Ą 02-06 15:36:12.140: E/AndroidRuntime(17670): ÁĒĪšļéandroid.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running?ŚľēŤĶ∑„Äā - abed
@abed:请发布你的完整活动代码。 - ρяσѕρєя K
我的问题是如何在不使用按钮的情况下调用弹出窗口(我希望在活动加载时调用)。 - abed
1个回答

11

在活动窗口显示之前,您正在尝试显示弹出窗口。 借助post方法,我们可以等待所有必要的启动生命周期方法完成。

请尝试这样做:

private void loadingPopup() {
    LayoutInflater inflater = this.getLayoutInflater();
    final View layout = inflater.inflate(R.layout.loading_dialog, null);

    final PopupWindow windows = new PopupWindow(layout , 300,300,true);
    windows.setFocusable(false);
    windows.setTouchable(true); 
    windows.setOutsideTouchable(true);
    layout.post(new Runnable() {
        public void run() {
            windows.showAtLocation(layout,Gravity.CENTER, 0, 0);
        }
    });
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接