0

在显示确认关闭应用程序的对话框时,我被以下问题困扰。该应用程序可以正常关闭,但在logcat中整个页面都是红色的。我已经通过网络进行了研究,有人说应该创建正在显示的对话框。

代码:

@Override
    public void onBackPressed() 
    {
        final Dialog dialog1 = new Dialog(First.this, android.R.style.Theme_Translucent_NoTitleBar);


        dialog1.setContentView(R.layout.alert_dialog_quit_with_email);
        dialog1.setCancelable(true);
        dialog1.show();  // LINE 323

        TextView thankyou = (TextView) dialog1.findViewById(R.id.thankyou);
        TextView Title_V1 = (TextView) dialog1.findViewById(R.id.Title_V1);
        Button alert_cancel = (Button) dialog1.findViewById(R.id.button_cancel);
        Button alert_quit = (Button) dialog1.findViewById(R.id.button_ok);
        Button button_email = (Button) dialog1.findViewById(R.id.button_emailll);

alert_cancel.setOnClickListener(new OnClickListener() 
        {
            public void onClick(View v) 
            {
                dialog1.dismiss();
                return;
            }
        });

        alert_quit.setOnClickListener(new OnClickListener() 
        {
            public void onClick(View v) 
            {
                First.this.finish();
            }
        });

        button_email.setOnClickListener(new OnClickListener() 
        {
            public void onClick(View v) 
            {
                View view1 = getLayoutInflater().inflate(R.layout.first, null);
                button_Email_click(view1);
            }
        });
    }

日志猫:

09-29 23:33:45.450: E/WindowManager(27052): Activity com.abc.abc.First has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@42cc5de0 that was originally added here
09-29 23:33:45.450: E/WindowManager(27052): android.view.WindowLeaked: Activity com.abc.abc.First has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@42cc5de0 that was originally added here
09-29 23:33:45.450: E/WindowManager(27052):     at android.view.ViewRootImpl.<init>(ViewRootImpl.java:412)
09-29 23:33:45.450: E/WindowManager(27052):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:312)
09-29 23:33:45.450: E/WindowManager(27052):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:224)
09-29 23:33:45.450: E/WindowManager(27052):     at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:149)
09-29 23:33:45.450: E/WindowManager(27052):     at android.view.Window$LocalWindowManager.addView(Window.java:554)
09-29 23:33:45.450: E/WindowManager(27052):     at android.app.Dialog.show(Dialog.java:277)
09-29 23:33:45.450: E/WindowManager(27052):     at com.abc.abc.First.onBackPressed(First.java:323)
09-29 23:33:45.450: E/WindowManager(27052):     at android.app.Activity.onKeyUp(Activity.java:2192)
09-29 23:33:45.450: E/WindowManager(27052):     at android.view.KeyEvent.dispatch(KeyEvent.java:2729)
09-29 23:33:45.450: E/WindowManager(27052):     at android.app.Activity.dispatchKeyEvent(Activity.java:2431)
09-29 23:33:45.450: E/WindowManager(27052):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2009)
09-29 23:33:45.450: E/WindowManager(27052):     at android.view.ViewRootImpl.deliverKeyEventPostIme(ViewRootImpl.java:3942)
09-29 23:33:45.450: E/WindowManager(27052):     at android.view.ViewRootImpl.handleImeFinishedEvent(ViewRootImpl.java:3890)
09-29 23:33:45.450: E/WindowManager(27052):     at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:3019)
09-29 23:33:45.450: E/WindowManager(27052):     at android.os.Handler.dispatchMessage(Handler.java:99)
09-29 23:33:45.450: E/WindowManager(27052):     at android.os.Looper.loop(Looper.java:137)
09-29 23:33:45.450: E/WindowManager(27052):     at android.app.ActivityThread.main(ActivityThread.java:4898)
09-29 23:33:45.450: E/WindowManager(27052):     at java.lang.reflect.Method.invokeNative(Native Method)
09-29 23:33:45.450: E/WindowManager(27052):     at java.lang.reflect.Method.invoke(Method.java:511)
09-29 23:33:45.450: E/WindowManager(27052):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1008)
09-29 23:33:45.450: E/WindowManager(27052):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:775)
09-29 23:33:45.450: E/WindowManager(27052):     at dalvik.system.NativeStart.main(Native Method)

问题:

我试图写为,dialog1.create().show();但它随后用红色下划线表示.create()并将其描述为The method create() is undefined for the type Dialog

我发现红色的logcat只会在按下退出按钮时出现......是因为它会显示一个对话框但活动已关闭吗?我已经声明了 dialog1...如何修改?谢谢!

4

4 回答 4

1

在这两种方法中也关闭你的对话框,就像这样

 alert_quit.setOnClickListener(new OnClickListener() 
        {
            public void onClick(View v) 
            {

                  First.this.finish();
                  dialog1.dismiss();

            }
        });

        button_email.setOnClickListener(new OnClickListener() 
        {
            public void onClick(View v) 
            {
                View view1 = getLayoutInflater().inflate(R.layout.first, null);
                button_Email_click(view1);
                dialog1.dismiss();
            }
        });
于 2013-09-29T15:57:48.150 回答
0

我认为您应该添加View.到您的onClickListeners, 和Override它们中。

前任。

alert_cancel.setOnClickListener(new View.OnClickListener() 
        {
            @Override
            public void onClick(View v) 
            {
                dialog1.dismiss();
                return;
            }
        });
于 2013-09-29T15:51:52.210 回答
0

在 onKeyDown 而不是 onBackPressed 中尝试相同的操作。

       @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_BACK) {
                // Your code
            }
            return super.onKeyDown(keyCode, event);
        }
于 2013-09-29T15:59:02.300 回答
0

你也可以试试dialog1.cancel()。基本上问题可能是因为对话框没有被取消或关闭,所以它泄漏了。

于 2014-08-12T13:04:04.593 回答