onRestoreInstanceState не перезагружает все просмотры
Я разрабатываю приложение, в котором пользователи заполняют форму с фотографиями и задают несколько вопросов да / нет. Если выбрано "да", вам нужно добавить дополнительную информацию в диалог. Затем эта информация вставляется в TextView
и это TextView
вставлен в LinearLayout
,
Проблема в том, что когда пользователь переключается на другое приложение, этот экран переходит в фоновый режим и впоследствии уничтожается Android (потому что системе нужна память). Затем, когда пользователь возвращается в приложение, onRestoreInstanceState()
метод вызывается, возвращая некоторые переменные, но не TextView
внутри LinearLayout
, Я использую аннотации Android для возврата этих переменных. Как мне восстановить эти представления Android?
<LinearLayout
android:id="@+id/estoque_zerado_pergunta_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:visibility="visible">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/existe_estoque_zerado"
android:textSize="@dimen/abc_text_size_large_material"
android:layout_margin="5dp"/>
<RadioGroup
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RadioButton
android:id="@+id/radio_estoque_zerado_sim"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/sim" />
<RadioButton
android:id="@+id/radio_estoque_zerado_nao"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="@string/nao"/>
</RadioGroup>
</LinearLayout>
<LinearLayout
android:id="@+id/estoque_zerado_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:visibility="gone" >
<LinearLayout
android:id="@+id/estoque_zerado_itens_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<!--Lista de itens aqui-->
</LinearLayout>
<LinearLayout
android:id="@+id/add_estoque_zerado_item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="5dp" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="10dp"
android:src="@drawable/ic_adicionar"
android:contentDescription="@string/adicionar_estoque_zerado"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:text="@string/adicionar_estoque_zerado"
android:textSize="@dimen/abc_text_size_medium_material" />
</LinearLayout>
</LinearLayout>
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
Log.d("onRestoreInstanceState", "onRestoreInstanceState: chamou onRestoreInstanceState");}
@Override
public void onSaveInstanceState(Bundle bundle) {
super.onSaveInstanceState(bundle);
Log.d("onSaveInstanceState", "onSaveInstanceState: chamou onSaveInstanceState");}
Извините за мой начинающий английский. Заранее спасибо.
2 ответа
Насколько я знаю onRestoreInstanceState
не восстанавливает ваши взгляды. onCreate
а также onRestoreInstanceState
использует тот же Bundle
поэтому инициализируйте свои взгляды и проверьте savedInstanceState
в onCreate
, Проверьте документы ниже.
https://developer.android.com/reference/android/app/Activity.html
https://developer.android.com/training/basics/activity-lifecycle/recreating.html
Ваши представления должны иметь идентификатор, если вы хотите, чтобы Android автоматически сохранял состояние в onSaveInstanceState.
Основано на https://developer.android.com/training/basics/activity-lifecycle/recreating.html
Вы должны сохранить переменную, которую хотите вернуть. в onSaveInstanceState вы сохраняете свои данные
static final String SAVE_STRING = "string_to_save";
...
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
// Save variable value on bundle
savedInstanceState.putInt(SAVE_STRING, yourstring);
// Always call the superclass so it can save the view hierarchy state
super.onSaveInstanceState(savedInstanceState);
}
тогда вы можете получить их в onRestoreInstanceState
public void onRestoreInstanceState(Bundle savedInstanceState) {
// Always call the superclass so it can restore the view hierarchy
super.onRestoreInstanceState(savedInstanceState);
// Restore state members from saved instance
yourstring = savedInstanceState.getInt(SAVE_STRING);
}