Текст TextView исчезает при повороте устройства - PullRequest
9 голосов
/ 16 января 2012

Я пишу приложение для набора номера телефона для Android.Я создал раскладку для клавиатуры, которая содержит TextView и 10 кнопок.Кнопки являются клавишами для 10 цифр (от 0 до 9), а TextView предназначен для отображения числа в соответствии с нажатыми клавишами.

В моем приложении я добавляю текст («0» или «1» и т. Д.).) в TextView для каждой нажатой кнопки.Если я нажал кнопки 1, 2, 3 , тогда текст в TextView будет 123 .Проблема в том, что давайте возьмем экран в ландшафтном режиме, а TextView содержит 123, если я поверну его, в портретном режиме нет текста в TextView.

Пожалуйста, помогите мне в этом.

Ответы [ 5 ]

14 голосов
/ 24 марта 2014

То, что порекомендовал @jeet, не сработало для меня.Мне пришлось добавить «screenSize».Это строка, которую вы должны добавить в свой manifest.xml в узле <activity> вашей активности:

android:configChanges="keyboardHidden|orientation|screenSize"

Таким образом, полный узел может выглядеть так:

<activity
android:name=".YourActivity"
android:label="@string/app_name"
android:configChanges="keyboardHidden|orientation|screenSize"
android:theme="@style/AppTheme.NoActionBar">
7 голосов
/ 16 января 2012

Причина этого в том, что Android в основном разрушает активность и создает ее снова каждый раз, когда вы поворачиваете устройство.Это в основном позволяет учитывать разные макеты в зависимости от портретного / ландшафтного режима.

Лучший способ справиться с этим - сохранить любые данные, которые вам нужны для хранения в Activity Bundle , путем ответа на событие onSavedInstance (которое вызывается непосредственно перед тем, как Android уничтожает действие), а затемповторное применение в стандартном событии onCreate.

Хотя вы можете добавить «ориентацию» к свойству configChanges, имейте в виду, что вы в основном говорите Android, что вы будете самостоятельно обрабатывать все, что касается изменения ориентации - включаяизменение макета и т. д.

7 голосов
/ 16 января 2012

Пожалуйста, проверьте изменение ориентации, вызывается метод create, который требует повторного создания всех видов, поэтому вам нужно использовать один из следующих методов:

  1. использовать метод onSavedInstance и сохранитьсостояния компонентов / представлений для объединения.
  2. Просто используйте следующий флаг true в файле манифеста в теге активности android: configChanges = "клавиатура скрытая | ориентация".как показано ниже:

    <activity android:name=".SampleActivity" android:label="@string/app_name"
        android:configChanges="keyboardHidden|orientation">
        ...
    </activity>
    
1 голос
/ 15 января 2019

Чтобы сохранить текст TextView, вы можете просто установить свойство TextView freezesText в true .Как в:

    <TextView
    ...
    android:freezesText="true"
    .../>

Это принятый ответ здесь: Восстановление состояния TextView после поворота экрана?

0 голосов
/ 02 августа 2017

Если у кого-то все еще проблемы ... это помогло мне

public class BranjeKP extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_branje_kp);

    //...
}

@Override
protected void onSaveInstanceState(Bundle out) {
    super.onSaveInstanceState(out);
    out.putString("TVNazivPod", TVNazivPodatka.getText().toString());
    out.putString("TVEnotaMere", TVEnotaMere.getText().toString());
}

@Override
protected void onRestoreInstanceState(Bundle in) {
    super.onRestoreInstanceState(in);
    TVNazivPodatka.setText(in.getString("TVNazivPod"));
    TVEnotaMere.setText(in.getString("TVEnotaMere"));
}

Вы в основном сохраняете любые значения, которые хотите, перед вращением (то есть, когда вызывается onSaveInstanceState) в Bundle, а после вращения (onRestoreInstanceState) вы просто извлекаете все значения из Bundle. Просто для пояснения: TVNazivPodatka и TVEnotaMere являются виджетами TextView.

... с помощью Как предотвратить потерю состояния пользовательских видов при изменении ориентации экрана

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...