活动开始时显示弹出窗口

扎克·鲍威尔(Zac Powell)

活动开始后,我需要立即显示一个弹出窗口,但是最终导致应用程序崩溃,当前代码如下:

public class GameActivity extends SherlockActivity {

    Button firstAnswer;
    ...
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_game);
        ...
        firstAnswer = (Button) findViewById(R.id.firstanswerbtn);
        ...
    }

    protected void onStart() {
        super.onStart();
        LayoutInflater layoutInflater = (LayoutInflater) getBaseContext()

        .getSystemService(LAYOUT_INFLATER_SERVICE);
        View popupView = layoutInflater.inflate(R.layout.playpopup, null);
        final PopupWindow popupWindow = new PopupWindow(popupView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

        Button play = (Button) popupView.findViewById(R.id.letsplay);
        play.setOnClickListener(new Button.OnClickListener() {

            @Override
            public void onClick(View v) {
                playRound();
                popupWindow.dismiss();
            }
        });

        popupWindow.showAtLocation(firstAnswer, Gravity.CENTER, 0, 0);
    }

    ...
}

但是我最终崩溃了:

12-02 22:27:27.534: E/AndroidRuntime(28142): java.lang.RuntimeException: Unable to start activity ComponentInfo{jabu.com.languagetemplate/jabu.com.languagetemplate.GameActivity}: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running?
12-02 22:27:27.534: E/AndroidRuntime(28142):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
12-02 22:27:27.534: E/AndroidRuntime(28142):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
12-02 22:27:27.534: E/AndroidRuntime(28142):    at android.app.ActivityThread.access$800(ActivityThread.java:144)
12-02 22:27:27.534: E/AndroidRuntime(28142):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
12-02 22:27:27.534: E/AndroidRuntime(28142):    at android.os.Handler.dispatchMessage(Handler.java:102)
12-02 22:27:27.534: E/AndroidRuntime(28142):    at android.os.Looper.loop(Looper.java:135)
12-02 22:27:27.534: E/AndroidRuntime(28142):    at android.app.ActivityThread.main(ActivityThread.java:5221)
12-02 22:27:27.534: E/AndroidRuntime(28142):    at java.lang.reflect.Method.invoke(Native Method)
12-02 22:27:27.534: E/AndroidRuntime(28142):    at java.lang.reflect.Method.invoke(Method.java:372)
12-02 22:27:27.534: E/AndroidRuntime(28142):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
12-02 22:27:27.534: E/AndroidRuntime(28142):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
12-02 22:27:27.534: E/AndroidRuntime(28142): Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running?
12-02 22:27:27.534: E/AndroidRuntime(28142):    at android.view.ViewRootImpl.setView(ViewRootImpl.java:562)
12-02 22:27:27.534: E/AndroidRuntime(28142):    at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:272)
12-02 22:27:27.534: E/AndroidRuntime(28142):    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
12-02 22:27:27.534: E/AndroidRuntime(28142):    at android.widget.PopupWindow.invokePopup(PopupWindow.java:1058)
12-02 22:27:27.534: E/AndroidRuntime(28142):    at android.widget.PopupWindow.showAtLocation(PopupWindow.java:887)
12-02 22:27:27.534: E/AndroidRuntime(28142):    at android.widget.PopupWindow.showAtLocation(PopupWindow.java:851)
12-02 22:27:27.534: E/AndroidRuntime(28142):    at package.GameActivity.onStart(GameActivity.java:142)
12-02 22:27:27.534: E/AndroidRuntime(28142):    at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1220)
12-02 22:27:27.534: E/AndroidRuntime(28142):    at android.app.Activity.performStart(Activity.java:5949)
12-02 22:27:27.534: E/AndroidRuntime(28142):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2261)
12-02 22:27:27.534: E/AndroidRuntime(28142):    ... 10 more

142行是:

    popupWindow.showAtLocation(firstAnswer, Gravity.CENTER, 0, 0);
哈内洛·艾诺塞克

您可以尝试类似:

firstAnswer.post(new Runnable() {
   public void run() {
     pw.showAtLocation(firstAnswer, Gravity.CENTER, 0, 0);
   }
});

即使您在onCreate方法中设置了主布局,这还是不够的。您需要将该操作排队,直到一切准备就绪。

希望这可以帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

活动开始时不会显示AlertDialog

来自分类Dev

活动开始时不显示片段

来自分类Dev

在活动创建失败时显示弹出窗口

来自分类Dev

活动开始时,CardView是否不显示在recyclerview内?

来自分类Dev

活动开始时的动画跳转

来自分类Dev

活动开始时禁用焦点

来自分类Dev

活动开始时如何停止AlarmManager

来自分类Dev

当adblock处于活动状态时显示弹出窗口

来自分类Dev

活动开始时为何不显示软键盘?

来自分类Dev

活动开始时为何不显示软键盘?

来自分类Dev

如何在活动开始时显示数字键盘?

来自分类Dev

Sublime Text,开始时全屏显示

来自分类Dev

在开始时显示总计数值

来自分类Dev

拖动开始时显示放置目标

来自分类Dev

单击时显示弹出窗口

来自分类Dev

如何在活动中显示弹出窗口?

来自分类Dev

从通知意图开始时保持活动状态

来自分类Dev

将片段设置为活动开始时的布局

来自分类Dev

活动开始时黑屏5-10秒

来自分类Dev

活动在片段内部开始时出现黑屏

来自分类Dev

RecyclerView-活动开始时的SlideIn动画

来自分类Dev

如何在应用程序开始时使活动闪烁?

来自分类Dev

仅在活动已经开始时才接收NFC意图

来自分类Dev

从片段开始时,活动会多次启动

来自分类Dev

将片段设置为活动开始时的布局

来自分类Dev

物料抽屉在活动开始时自动打开

来自分类Dev

RecyclerView 在活动开始时不调用 onCreateViewHolder

来自分类Dev

生成开始时,Visual Studio始终关闭“输出”窗口

来自分类Dev

显示弹出窗口时将灰色应用于不活动的屏幕