问题描述
实现一个应用程序,用户可以登录我有以下情况:如果用户登录进行操作否则启动登录活动的结果,如果结果是Activity.RESULT_OK做动作
我的问题是,它进行的动作是显示DialogFragment,但调用
DialogFragment newFragment = MyDialogFragment.newInstance(mStackLevel);
newFragment.show(英尺,对话)
在onActivityResult回调抛出一个异常:
产生的原因:java.lang.IllegalStateException:
之后的onSaveInstanceState无法执行此操作
所以,我怎么能解决这个问题?我想在提高的标志出现,并显示在onResume对话,但我看到这个解决方案有点脏
编辑:增加了更多的code(IM下面这个例子显示了 DialogFragment
当被由用户请求的操作:
...
如果(!user.isLogged()){
startActivityForResult(新意图(CNT,Login.class),REQUEST_LOGIN_FOR_COMMENT);
}
在同一片段
@覆盖
公共无效onActivityResult(INT申请code,INT结果code,意图数据){
super.onActivityResult(要求code,因此code,数据);
如果(要求code == REQUEST_LOGIN_FOR_COMMENT和放大器;&安培;结果code == Activity.RESULT_OK){
FragmentTransaction英尺= getFragmentManager()的BeginTransaction()。
DialogFragment newFragment = MyDialogFragment.newInstance();
newFragment.show(英尺,对话)
}
}
如果在登录活动的用户登录调用;
的setResult(Activity.RESULT_OK);
完();
最好的事情我已经出来是不使用.show(),而是做到这一点。
CheckinSuccessDialog对话框=新CheckinSuccessDialog();
//dialog.show(getSupportFragmentManager(),NULL);
FragmentTransaction英尺= getSupportFragmentManager()的BeginTransaction()。
ft.add(对话框,NULL);
ft.commitAllowingStateLoss();
Implementing an app where the user can log in I have the following situation: If the user is logged in perform the action else start the login activity for result and if the result is Activity.RESULT_OK do the action.
My problem is that the action to perfom is to show a DialogFragment, but calling
DialogFragment newFragment = MyDialogFragment.newInstance(mStackLevel);
newFragment.show(ft, "dialog")
in the onActivityResult callback throws an exception:
Caused by: java.lang.IllegalStateException:
Can not perform this action after onSaveInstanceState
So how can I solve this? I'm thinking in raising a flag there and show the dialog in the onResume but I see this solution a little dirty
Edit: Added more code (Im following this example for showing the DialogFragment
When the action is requested by the user:
...
if (!user.isLogged()){
startActivityForResult(new Intent(cnt, Login.class), REQUEST_LOGIN_FOR_COMMENT);
}
In the same fragment
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_LOGIN_FOR_COMMENT && resultCode == Activity.RESULT_OK) {
FragmentTransaction ft = getFragmentManager().beginTransaction();
DialogFragment newFragment = MyDialogFragment.newInstance();
newFragment.show(ft, "dialog")
}
}
And if the user logs in the Login activity calls;
setResult(Activity.RESULT_OK);
finish();
Best thing I've come up with is to not use .show() but rather do this.
CheckinSuccessDialog dialog = new CheckinSuccessDialog();
//dialog.show(getSupportFragmentManager(), null);
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(dialog, null);
ft.commitAllowingStateLoss();
这篇关于在onActivityResult和动作]错误不能执行的onSaveInstanceState&QUOT后,这个动作;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!