Я пишу приложение для мобильного телефона для Android. Я создал макет для клавиатуры, который содержит TextView и 10 кнопок. Кнопки – это клавиши для 10 цифр (от 0 до 9), а TextView – для отображения номера в соответствии с нажатыми клавишами.
В моем приложении я добавляю текст («0» или «1» и т. Д.) В TextView для каждой нажатой кнопки. Если я нажал кнопки 1, 2, 3, тогда текст в TextView будет 123 . Проблема в том, что экран будет в ландшафтном режиме, а TextView содержит 123, если я его переверну, в портретном режиме нет текста в TextView.
Пожалуйста, помогите мне Относительно этого.
Проверьте изменение ориентации, вызывается метод create, который требует, чтобы все представления были созданы снова, поэтому вам нужно использовать один из следующих способов:
Просто используйте следующий флаг 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.
… с помощью справки Как предотвратить пользовательские представления от потери состояния при изменении ориентации экрана