Add*_*dev 46 java android android-fragments
实现用户可以登录的应用程序我有以下情况:如果用户已登录,则执行操作,否则启动结果的登录活动,如果结果是Activity.RESULT_OK,则执行操作.
我的问题是,要执行的操作是显示DialogFragment,但是调用
DialogFragment newFragment = MyDialogFragment.newInstance(mStackLevel);
newFragment.show(ft, "dialog")
Run Code Online (Sandbox Code Playgroud)
在onActivityResult回调中引发异常:
Caused by: java.lang.IllegalStateException:
Can not perform this action after onSaveInstanceState
Run Code Online (Sandbox Code Playgroud)
那我怎么解决这个问题呢?我正在考虑在那里举起一个标志并在onResume中显示对话框,但我看到这个解决方案有点脏
编辑:添加了更多代码(我按照此示例显示DialogFragment
当用户请求操作时:
...
if (!user.isLogged()){
startActivityForResult(new Intent(cnt, Login.class), REQUEST_LOGIN_FOR_COMMENT);
}
Run Code Online (Sandbox Code Playgroud)
在同一个片段中
@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")
}
}
Run Code Online (Sandbox Code Playgroud)
如果用户登录Login活动调用;
setResult(Activity.RESULT_OK);
finish();
Run Code Online (Sandbox Code Playgroud)
Nat*_*ann 99
我想出的最好的事情是不要使用.show()而是这样做.
CheckinSuccessDialog dialog = new CheckinSuccessDialog();
//dialog.show(getSupportFragmentManager(), null);
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(dialog, null);
ft.commitAllowingStateLoss();
Run Code Online (Sandbox Code Playgroud)
Che*_*eng 10
这是适合我的解决方法.
private void alert(final String message) {
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
public void run() {
AlertDialogFragment alertDialogFragment = AlertDialogFragment.newInstance(message);
alertDialogFragment.show(getFragmentManager(), ALERT_DIALOG_FRAGMENT);
}
});
}
Run Code Online (Sandbox Code Playgroud)