Я совершенно новичок в java и android. У меня есть следующие настройки пользовательского интерфейса:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<EditText
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
...
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
<ScrollView
android:id="@+id/scrollView"
android:layout_width="match_parent"
android:layout_height="0dp"
...>
<LinearLayout
android:id="@+id/linLay"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" />
</ScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>
Во время выполнения некоторые TextViews
будут добавлены к LinearLayout
. У меня есть следующая проблема. Телефон отключается, динамически добавленное TextViews
исчезает. Причина в том, что метод действия onCreate(Bundle savedInstanceState)
вызывается, если вы перевернули телефон.
Я установил следующий метод, чтобы сохранить состояние экземпляра (textViews является членом класса Activity (Vector) ):
protected void onSaveInstanceState(Bundle state) {
super.onSaveInstanceState(state);
//Save the TextViews
textViews.removeAllElements();
LinearLayout layout = getLinearLayout();
while (layout.getChildCount() > 0)
{
View view = layout.getChildAt(0);
if (view instanceof TextView)
{
layout.removeView(view);
textViews.add((TextView) view);
}
}
state.putSerializable("textViews", textViews);
}
Я реализовал этот код в методе onCreate(Bundle savedInstanceState)
для восстановления TextViews:
LinearLayout linLay = getLinearLayout();
//Load TextViews
if ((savedInstanceState != null) && (savedInstanceState.getSerializable("textViews") != null))
{
Serializable serializable = savedInstanceState.getSerializable("textViews");
if (serializable instanceof Vector)
{
textViews= (Vector<TextView>) serializable;
}
}
if (textViews!= null) {
for (TextView textView : textViews) {
linLay.addView(textView);
}
}
Этот код работает для проблемы с переворачиванием, но создает новую проблему. Если я нажимаю кнопку «Домой», я получаю следующую ошибку:
Посылка: невозможно определить значение
Я прочитал, что проблема в том, что Vector<TextView>
не сериализуем , Но почему переворачивание телефона не влияет на эту ошибку? Я отлаживаю приложение, и я уверен, что метод state.putSerializable(...)
вызывается, если телефон перевернут.
Как бы вы сохранили TextView
вместо этого? Невозможно сохранить String
вместо TextView
, потому что backgroundResource
из TextViews
отличаются.