Java 无法使用首选项编辑器在单独的类中创建AlertDialog

Java 无法使用首选项编辑器在单独的类中创建AlertDialog,java,android,exception,android-alertdialog,android-context,Java,Android,Exception,Android Alertdialog,Android Context,我想从类中打开一个AlertDialog,因为我经常使用来自不同活动的对话框,我不想重复代码 虽然我将上下文作为参数传递,但得到了一个BadTokenException:无法添加窗口——tokennull无效;您的活动正在运行吗? public void getWarning(上下文){ final AlertDialog mAlertDialog=新建AlertDialog.Builder(context.create(); SharedReferences首选项=PreferenceMana

我想从类中打开一个
AlertDialog
,因为我经常使用来自不同活动的对话框,我不想重复代码

虽然我将上下文作为参数传递,但得到了一个
BadTokenException:无法添加窗口——tokennull无效;您的活动正在运行吗?

public void getWarning(上下文){
final AlertDialog mAlertDialog=新建AlertDialog.Builder(context.create();
SharedReferences首选项=PreferenceManager.GetDefaultSharedReferences(上下文);
final SharedPreferences.Editor=preferences.edit();
LayoutFlater充气机=LayoutFlater.from(上下文);
查看弹出窗口=充气机。充气(R.layout.warning\u游戏,空);
CheckBox check=popUp.findviewbyd(R.id.CheckBox);
check.setOnCheckedChangeListener(新建CompoundButton.OnCheckedChangeListener(){
@凌驾
检查更改后的公共无效(复合按钮复合按钮,布尔b){
如果(b){
编辑器.putBoolean(“检查警告”,false);
d(标记“onCheckedChanged:禁用警告”);
editor.apply();
}否则{
编辑器.putBoolean(“检查警告”,true);
d(标记“onCheckedChanged:warnings enabled”);
editor.apply();
}
}
});
mAlertDialog.setTitle(“标题”);
mAlertDialog.setMessage(“消息”);
设置视图(弹出窗口,75,0,75,0);
mAlertDialog.setButton(androidx.appcompat.app.AlertDialog.BUTTON_肯定,“确定”,新的DialogInterface.OnClickListener(){
@凌驾
公共void onClick(DialogInterface,inti){
//打开另一个AlertDialog;
mAlertDialog.disclose();
}
});
mAlertDialog.setButton(androidx.appcompat.app.AlertDialog.BUTTON_否定,“Abbrechen”,新的DialogInterface.OnClickListener(){
@凌驾
公共void onClick(DialogInterface,inti){
mAlertDialog.disclose();
}
});
mAlertDialog.show();
}
但我将AlertDialog作为参数传递,并在活动中更新它它适用于AlertDialogs,而无需在首选项中使用上下文:

活动的演员阵容:

ButtonDialogs打开=新的ButtonDialogs(按钮);
AlertDialog=新建AlertDialog.Builder(getContext()).create();
打开.getDialog(对话框);
课堂教学方法:

公共警报对话框getDialog(最终警报对话框mAlertdialog){ String button_label=button.getText().toString(); 开关(按钮和标签){ 违约: 返回对话框; 案例“一”: mAlertdialog.setTitle(“一”); 设置消息(“文本一”); mAlertdialog.setButton(DialogInterface.BUTTON_中性,“关闭”,新建DialogInterface.OnClickListener(){ @凌驾 公共void onClick(DialogInterface,inti){ mAlertdialog.disclose(); } }); mAlertdialog.show(); 返回对话框; } } } 我还尝试将AlertDialog作为参数,并使用
context-context=mAlertDialog.getContext()
获取上下文,然后得到一个
IllegalStateException:此活动需要使用Theme.AppCompat主题(或子代)。

因此,我将
androidx.appcompat.app.AlertDialog
更改为
android.app.AlertDialog
,并获取
BadTokenException:无法添加窗口--标记null无效;您的活动正在运行吗?

我尝试过这样的回调:但我又遇到了BadToken异常。 在show in活动中的单独类中创建AlertDialog也不起作用


我现在能做什么?

好吧,我成功地使用了这个:

公共类活动扩展了AppCompatActivity{
上下文=这个;
//不重要的代码
最终ButtonDialogs转换=新ButtonDialogs(上下文);
cast.getWarning(上下文);
}
ButtonDialog.class:

public类按钮对话框扩展了DialogFragment{
私人语境;
公共按钮对话框(上下文){
this.context=上下文;
}
public void getWarning(最终上下文){
final AlertDialog mAlertDialog=新建AlertDialog.Builder(context.create();
SharedReferences首选项=PreferenceManager.GetDefaultSharedReferences(上下文);
final SharedPreferences.Editor=preferences.edit();
//做事
mAlertDialog.show();
}
}