0

タイトルはあまり明確ではないかもしれません。短いタイトルで説明するのは難しいです。しかし、ここに問題があります。

アクティビティがMainActivityあり、開始時にアクティビティが表示されFragmentAます。MainActivityFragmentA からアクセスできるメニューが表示されます。FragmentA のメニューから、ユーザーは [Generate Password] をクリックします。これにより、 GeneratePasswordusingという別のアクティビティが呼び出されstartActivityForResultます。ユーザーが送信ボタンを押すと、ユーザーは FragmentA とonActivityResult内の関数に戻されますMainActivity。次に、この関数内で共通クラスを使用して、[はい] ボタンと [いいえ] ボタンを含む 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 に答える