Текст TextView исчезает при повороте устройства

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

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

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

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

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

     <activity android:name=".SampleActivity" android:label="@string/app_name" android:configChanges="keyboardHidden|orientation"> ... </activity> 

То, что рекомендовал @jeet, не помогло мне. Мне пришлось добавить «screenSize». Это строка, которую вы должны добавить в свой манифест .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"> Размер <activity android:name=".YourActivity" android:label="@string/app_name" android:configChanges="keyboardHidden|orientation|screenSize" android:theme="@style/AppTheme.NoActionBar"> 

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

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

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

Если у кого-то все еще есть проблемы … это сделало трюк для меня

 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.

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