Есть три активити. Обозначим их "A, B, C".
Из "A" отправляется в "B" параметр в виде Int (число попыток).
public void onAnimationEnd(Animation animation) {
Intent intent = new Intent(activity, GameActivity.class);
intent.putExtra(Constans.GUESSES_AMOUNT, guessPicker.getValue());
startActivity(intent);
}
В активити "B" этот параметр берется из "A" в случае если savedInstanceState == null, иначе берется значение из savedInstanceState.
if(savedInstanceState == null) {
if(getIntent().getExtras() != null) {
guessAmount = getIntent().getExtras().getInt(Constans.GUESSES_AMOUNT);
}
} else {
guessAmount = savedInstanceState.getInt(Constans.GUESSES_AMOUNT);
}
Сохранение происходит вот так:
@Override
public void onSaveInstanceState(Bundle outState) {
outState.putInt(Constans.GUESSES_AMOUNT, guessAmount);
super.onSaveInstanceState(outState);
}
Соответственно из "B" мы можем перейти в "C".
Мне нужно чтобы параметр, который хранится в "B" (guessAmount) инициализировался исходя из того что пришло из "A" и при этом, чтобы значение сохраняло свое состояние при переходе из "B" в "C".
Далее в "C" происходят какие-то действия и идет переход обратно в "B".
private void startGameActivity(boolean guessResult, boolean isGuesses) {
Intent gameIntent = new Intent(activity, GameActivity.class);
putCurrentFlags(gameIntent, guessResult, isGuesses);
startActivity(gameIntent);
}
Проблема в том что код
guessAmount = savedInstanceState.getInt(Constans.GUESSES_AMOUNT);
Никогда не вызывается по причине того что savedInstanceState == null.
Что пробовал сделать:
1) Добавлял в Android manifest для активити "B" singleTop.
<activity android:name="com.guessplace.fragments.GameActivity"
android:launchMode="singleTop"/>
2) Идентификаторы создал для layout. Вот он:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/game_activity"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.guessplace.fragments.GameActivity">
<fragment
android:id="@+id/street_panorama"
android:name="com.google.android.gms.maps.StreetViewPanoramaFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<Button
android:id="@+id/make_guess"
android:layout_width="120dp"
android:layout_height="40dp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="67dp"
android:background="@drawable/btn_backg"
android:fontFamily="sans-serif-smallcaps"
android:onClick="makeGuess"
android:text="@string/make_guess" />
</RelativeLayout>
3) Пробовал вызывать outState.putInt(Constans.GUESSES_AMOUNT, guessAmount); до и после super.onSaveInstanceState(outState);
Небольшое замечание. A, B, C наследуются от Activity.