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

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

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

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

4 ответов


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

  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">

причина этого в том, что 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.

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