Wdrażanie aplikacji, w której użytkownik może się logować Mam następującą sytuację: Jeśli użytkownik jest zalogowany, wykonaj czynność, a następnie rozpocznij działanie logowania dla wyniku, a jeśli wynikiem jest Activity.RESULT_OK wykonaj akcję.Akcje w onActivityResult i "Błąd Nie można wykonać tej akcji po stanie OnSaveInstanceState"
Moim problemem jest to, że działania mające na celu perfom jest pokazanie DialogFragment, ale nazywając
DialogFragment newFragment = MyDialogFragment.newInstance(mStackLevel);
newFragment.show(ft, "dialog")
w zwrotnego onActivityResult rzuca wyjątek:
Caused by: java.lang.IllegalStateException:
Can not perform this action after onSaveInstanceState
Więc jak mogę rozwiązać ten problem? Zastanawiam się w podnoszeniu tam flagę i pokazać okno w onResume ale widzę to rozwiązanie trochę brudny
EDIT: Dodano więcej kodu (Im naśladują tego przykład pokazujący DialogFragment
Gdy działanie jest żądanie użytkownika:
...
if (!user.isLogged()){
startActivityForResult(new Intent(cnt, Login.class), REQUEST_LOGIN_FOR_COMMENT);
}
W tym samym fragmencie
@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")
}
}
A jeśli użytkownik loguje się do aktywności Logowanie nazywa;
setResult(Activity.RESULT_OK);
finish();
Myślę, że należy opublikować cały kod. Wygląda na to, że próbujesz wyświetlić okno dialogowe po upływie pewnego czasu. – nandeesh
Edytowane pytanie: D – Addev
Sprawdź http://www.androiddesignpatterns.com/2013/08/fragment-transaction-commit-state-loss.html, aby zrozumieć, dlaczego tak się dzieje. – Maragues