0

标题可能不是很清楚,用简短的标题很难解释。但问题就在这里。

我有一个活动,MainActivity然后在 start to show 时显示一个活动FragmentA。其中MainActivity显示了一个菜单,可通过 FragmentA 访问该菜单。从 FragmentA 的菜单中,用户单击 Generate Password,然后调用另一个GeneratePassword名为 using的活动startActivityForResult。当用户按下提交按钮时,用户将被发送回 FragmentAonActivityResultMainActivity. 在这个函数中,我使用了一个通用类,它允许我显示一个带有是和否按钮的 AlertDialog。如果我取出 common.showYesNoDialog() if 语句,OnActivityResult 工作正常,但是在使用它时我得到一个异常

android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application

下面是启动 GeneratePassword 活动的代码

Intent generatePasswrodIntent = new Intent(mMainActivity, GeneratePassword.class);
                startActivityForResult(generatePasswrodIntent, AddNewLogin.GENERATE_PASSWORD);
                return(true);

下面是设置 GeneratePassword 活动结果的代码

Intent intent = new Intent();
        Bundle bundle = new Bundle();
        bundle.putString("password", generatePassword.generatePassword());
        intent.putExtras(bundle);
        setResult(AddNewLogin.GENERATE_PASSWORD, intent);
        finish();

下面是显示警报对话框的 onActivityResult 的代码

Bundle bundle = data.getExtras();

        String password = bundle.getString("password");
        Log.d("PASSWORD", password);
        if (common.showYesNoDialog("Your Generated Password Is:\n " + password + "\nDo you want to copy this to the clipboard?", false))
        {
            ClipboardManager clipboard = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE);
            clipboard.setText(password);
        }

下面是 YesNoDialog 函数,但我知道这很好用,因为我已经在我的应用程序中的多个地方使用它没有问题。

final Handler handler = new Handler()
        {
            @Override
            public void handleMessage(Message mesg)
            {
                throw new RuntimeException();
            }
        };
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setCancelable(isCancelable);
            builder.setMessage(message)
            .setPositiveButton("Yes", new DialogInterface.OnClickListener() {

                public void onClick(DialogInterface dialog, int which) {
                    dialogResult = true;
                    handler.sendMessage(handler.obtainMessage());
                }
            })
            .setNegativeButton("No", new DialogInterface.OnClickListener() {

                public void onClick(DialogInterface dialog, int which) {
                    dialogResult = false;
                    handler.sendMessage(handler.obtainMessage());
                }
            });
        AlertDialog alert = builder.create();
        alert.show();
        try
        {
            Looper.loop();
        }
        catch (RuntimeException ex)
        {
            Log.d("Dialog Error", ex.toString());
        }
        return dialogResult;

下面是我如何初始化公共类

Common common = new Common(getApplicationContext());

而不是getApplicationContext,我尝试使用this但没有任何区别。

我只是不明白这里发生了什么。

感谢您的任何帮助,您可以提供

4

1 回答 1

0

问题出在你的showYesNoDialog(). showYesNoDialog() 方法的布尔参数有什么作用?

于 2013-01-24T21:38:35.467 回答