Текст TextView исчезает при повороте устройства
Я пишу приложение для набора номера телефона для android. Я создал макет для клавиатуры, который содержит TextView и 10 кнопок. Кнопки как ключи для 10 чисел (0 до 9) и TextView для показа номера согласно отжатым клавишам.
в моем приложении я добавляю текст ("0 "или" 1 " и т. д.) в TextView для каждой нажатой кнопки. Если я нажму кнопки 1, 2, 3 тут текст в TextView равен 123. Проблема в том, давайте возьмем экран находится в ландшафтном режиме и TextView содержит 123, если я включу его, в портретном режиме нет текста в TextView.
пожалуйста, помогите мне в этом.
4 ответов
пожалуйста, проверьте изменение ориентации, при создании вызывается метод, который требует, чтобы все представления были созданы снова, поэтому вам нужно использовать один из следующих методов:
- используйте метод onSavedInstance и сохраните состояния компонентов/представлений в пакет.
-
просто используйте следующий флаг 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">
причина этого в том, что Android в основном разрушает активность и создает ее снова каждый раз, когда вы поворачиваете устройство. Это в основном для различных макетов, основанных на портретном / ландшафтном режиме.
лучший способ справиться с этим-хранить любые данные, которые вам нужно сохранить в рамках действия Bundle, отвечая на событие onSavedInstance (вызываемое непосредственно перед тем, как Android уничтожит действие), а затем повторно применяя их в стандартном onCreate событие.
хотя can добавьте "ориентацию" в свойство 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 вызывается) в пакет, и после вращения (onRestoreInstanceState) вы просто вытаскиваете все значения из пакета. Чтобы уточнить, TVNazivPodatka и TVEnotaMere являются виджетами TextView.
...с помощью как предотвратить пользовательские представления от потери состояния через ориентацию экрана изменения