我已经覆盖了 onSavedInstanceState 并删除了 super ,我没有做任何事务,更不用说 volatile 函数或异步函数中的事务了。
我在自定义回调“onUserExistsListener”中调用它
@Override
public Boolean userExists(Boolean exists) {
if (exists) {
}
else
{
AlertDialogFragment Frag = AlertDialogFragment.newInstance(0, null);
Frag.show(getSupportFragmentManager(), "warndialog");
}
};
已经尝试了其他 SO 问题中建议的所有内容,但仍然没有找到解决方案?任何人?
代码:
AlertDialogFragment Frag = AlertDialogFragment.newInstance(0, null);
Frag.show(getSupportFragmentManager(), "warndialog");
过程:
OnCreate: (LoadNames 函数)
LoadNames 回调 -> 显示对话框。
更多:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
add_name_to_db();
}
功能:
public void add_name_to_db() {
Details.checkNameExists(user_txt.getText().toString());
Details.setOnUserExistsListener(new onUserExistsListener() {
@Override
public Boolean userExists(Boolean exists) {
if (exists)
{
} else {
runOnUiThread(new Runnable() {
@Override
public void run() {
AlertDialogFragment Frag = AlertDialogFragment.newInstance(0, null);
Frag.show(getSupportFragmentManager(), "warndialog");
}
});
}
} else {
Toast.makeText(getApplicationContext(), "This is not a valid KIK username",
Toast.LENGTH_SHORT).show();
}
return exists;
}
});
}
最佳答案
通过调用 Frag.show(getSupportFragmentManager(), "warndialog");
、 您实际上是在执行 fragment 事务 (请参阅 show() )。
如果 Activity 的 onSaveInstanceState() 方法已被调用,则当您尝试显示对话框时将抛出 IllegalStateException。您需要更改代码以确保在显示对话框 fragment 时,是在恢复 Activity 状态(即 onPostResume())之后进行的。有关更多信息,请参阅此 blog post。
您还可以提交允许状态 loss 的事务;
关于android - onSaveInstanceState - DialogFragment 后无法执行此操作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21295991/