タイトルはあまり明確ではないかもしれません。短いタイトルで説明するのは難しいです。しかし、ここに問題があります。
アクティビティがMainActivity
あり、開始時にアクティビティが表示されFragmentA
ます。MainActivity
FragmentA からアクセスできるメニューが表示されます。FragmentA のメニューから、ユーザーは [Generate Password] をクリックします。これにより、 GeneratePassword
usingという別のアクティビティが呼び出され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
たが、違いはありません。
ここで何が起こっているのかわかりません。
あなたが提供できる助けをありがとう