标题可能不是很清楚,用简短的标题很难解释。但问题就在这里。
我有一个活动,MainActivity
然后在 start to show 时显示一个活动FragmentA
。其中MainActivity
显示了一个菜单,可通过 FragmentA 访问该菜单。从 FragmentA 的菜单中,用户单击 Generate Password,然后调用另一个GeneratePassword
名为 using的活动startActivityForResult
。当用户按下提交按钮时,用户将被发送回 FragmentAonActivityResult
和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
但没有任何区别。
我只是不明白这里发生了什么。
感谢您的任何帮助,您可以提供