从服务启动时,对话框活动打开两次

时间:2015-04-13 08:37:51

标签: android android-service android-alertdialog

我有一个服务(称为AlarmService),在收到意图时打开一个以对话为主题的活动(在特定时间调用服务)。

@Override
protected void onHandleIntent(Intent intent) {
    Intent dialogIntent = new Intent(ctx, LogoutConfirmDialog.class);
    dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(dialogIntent);
}

我在AndroidManifest.xml中定义了LogoutConfirmDialog:

<activity android:name=".LogoutConfirmDialog"
            android:theme="@android:style/Theme.Holo.Dialog" />

Activity LogoutConfirmDialog只创建一个AlertDialog并显示它:

public class LogoutConfirmDialog extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        AlertDialog.Builder b = new AlertDialog.Builder(this);

        b.setTitle(R.string.dialog_logout_title);
        b.setMessage(R.string.dialog_logout_message);
        b.setPositiveButton(R.string.dialog_logout_positive, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    AlarmService.logout();
                }
            });
        b.setNegativeButton(R.string.dialog_logout_negative, null);
        AlertDialog dialog = b.create();
        dialog.show();
    }
}

现在的问题是,当显示LogoutConfirmDialog时,它会显示两个对话框。

  1. 第一个是我的对话框,其中包含在LogoutConfirmDialog的onCreate中设置的标题,消息,正面和负面按钮。
  2. 第二个只有标题(某种默认对话框),
  3. 从日志中我可以看到LogoutConfirmDialog只启动了一次,但是窗口管理器添加了两个窗口

    ActivityManager﹕ START u0 {flg=0x10000000 cmp=com.mypackage/.LogoutConfirmDialog} from uid 10104 on display 0
    
    WindowManager﹕ Adding window Window{d342658 u0 com.mypackage/com.mypackage.LogoutConfirmDialog} at 6 of 13 (after Window{7e66f7b u0 com.mypackage/com.mypackage.MainActivity})
    V/WindowManager﹕ Adding window Window{1100c096 u0 com.mypackage/com.mypackage.LogoutConfirmDialog} at 6 of 14 (before Window{d342658 u0 com.mypackage/com.mypackage.LogoutConfirmDialog
    

    如何摆脱第一个'titleonly'-dialog?或者如何防止它添加此对话框?

    提前致谢!

    修改 我添加了两个Dialogs的打印屏幕来澄清情况:

    First Dialog(这就是我想要的) http://i.stack.imgur.com/mxTT0.png

    当点击其中一个按钮或被解雇时,会显示第二个对话框: http://i.stack.imgur.com/bmCk7.png

2 个答案:

答案 0 :(得分:1)

您调用create和show。您可以只使您的构建器调用show,它会使用您预定义的参数自动创建。而不是这个:

AlertDialog dialog = b.create();
dialog.show();

用此显示:b.show();

答案 1 :(得分:0)

执行以下操作并尝试,而不是创建另一个对象使用相同的对象:

AlertDialog.Builder b = new AlertDialog.Builder(this);

        b.setTitle(R.string.dialog_logout_title);
        b.setMessage(R.string.dialog_logout_message);
        b.setPositiveButton(R.string.dialog_logout_positive, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    AlarmService.logout();
                }
            });
        b.setNegativeButton(R.string.dialog_logout_negative, null);
       b.show();

希望这会对你有所帮助。