标题可能不是很清楚,在短标题中难以解释。但这是问题所在。
我有一个活动MainActivity
,然后在展示FragmentA
时显示活动。在MainActivity
中,显示了一个可通过FragmentA访问的菜单。在FragmentA的菜单中,用户单击Generate Password,然后调用另一个名为GeneratePassword
的活动,该活动使用startActivityForResult
进行调用。当用户按下提交按钮时,用户随后被发送回FragmentA和onActivityResult
内的函数MainActivity
。在这个函数中,我然后使用一个公共类,它允许我显示带有Yes和No Buttons的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());
我尝试使用this
而不是getApplicationContext,但没有任何区别。
我只是不明白这里发生了什么。
感谢您提供的任何帮助
答案 0 :(得分:0)
问题出在showYesNoDialog()
。 showYesNoDialog()方法的布尔参数有什么作用?