Intereting Posts
Блокировка ориентации экрана QML Android: windowSoftInputMode = "adjustPan" не работает Android Studio не взаимодействует с adb GLIBC … не найдена ошибка Где константа запроса (64206) для входа в систему, определенная в Facebook SDK Как обновления приложений для Android работают технически? JQuery не работает в WebView Google отображает лучи, чтобы показать направления / заголовок пользователя в android MapFragment Как создать накладной макет при просмотре списка Как избежать перезапуска активности при изменении ориентации на Android Почему браузер не будет охватывать этот абзац по всей ширине браузера? Не удалось найти HelloAndroid.apk? Покрытие кода с помощью jacoco для Android-библиотеки Кнопки с многострочным потоком текста в строке выравнивания, как его исправить? Android получает ограничивающий прямоугольник вида Потоковая музыка и сохранение файла кеша на локальном телефоне на Android

EditText удваивается при вращении

У меня проблема с элементом управления EditText. Эта проблема происходит только в этом конкретном действии и других действиях с EditTexts. Я удалил все вызовы setText для этого EditText, и проблема все еще сохраняется.

Я запускаю Android 2.3.4 на своем мобильном устройстве. Это Nexus S и работает под управлением Android. В эмуляторе (под управлением Android 2.2) эта проблема не возникает.

Когда я поворачиваю телефон, Android автоматически заменяет текст, который был в EditText до поворота. Я не использую savedInstanceState, чтобы что-либо сделать. Android делает это сам.

Моя проблема:

Предположим, что слово «тест» находится в EditText. Когда я поворачиваю телефон, Android поместит «testtest» в EditText, когда активность будет воссоздана. Это происходит только тогда, когда я использую виртуальную клавиатуру для ввода в EditText, я не нажимаю кнопку «done» на виртуальной клавиатуре, я нажимаю ее, чтобы удалить виртуальную клавиатуру, а затем вращаю устройство. Если я использую кнопку «done» вместо кнопки «Назад», проблема не возникает.

Есть идеи? Как я уже сказал, я НЕ устанавливаю текст. Все строки, вызывающие setText, были закомментированы.

Обновление 1: Я прокомментировал все в этой деятельности, кроме метода onCreate (). Проблема все еще возникает.

Обновление 2: Я создал новую активность. Эта новая активность имеет только метод onCreate (). Единственное, что используется в методе onCreate () – это вызов setContentView (использует тот же файл макета) и вызов super onCreate (). Проблема по-прежнему сохраняется. Я в тупике. Единственное, что я могу догадаться, – это что-то странное с файлом макета. Я понятия не имею, что это будет.

Обновление 3: я удалил все из макета, кроме EditText. Проблема все еще возникает.

Solutions Collecting From Web of "EditText удваивается при вращении"

У меня была аналогичная проблема, но я вижу ее только при включении автозаполнения для EditText.

Моя работа заключалась в том, чтобы отключить автозаполнение. <EditText . . . android:inputType="textMultiLine|textNoSuggestions" />

Я придумал обход, который вы могли бы попробовать. Он работает путем подклассификации EditText, захватывает пару событий, а затем принимает только текстовые изменения, которые появляются при отображении клавиатуры, что должно отфильтровывать любые изменения, которые пользователь не вводил. Я до сих пор не знаю, что может быть причиной этого.

 static class CustomEditText extends EditText{ boolean keyboardHidden = true; String mText = null; public CustomEditText(Context context) { super(context); // TODO Auto-generated constructor stub } public CustomEditText(Context context, AttributeSet attr) { super(context, attr); // TODO Auto-generated constructor stub } //This gets called for any text field change, regardless of where the change comes from //When the phone flips and tries to double the text we can catch it. //If the keyboard is hidden (meaning the user isn't typing anything) the strings should match protected void onTextChanged(CharSequence text, int start, int before, int after){ if(keyboardHidden && mText!=null && !text.toString().equals(mText)){ setText(mText); setSelection(mText.length()); } else mText = text.toString(); } //There's no way right now to directly check if the soft keyboard is displayed //On touch, the soft keyboard is displayed by default for EditText, so assume the keyboard is displayed from this point on public boolean onTouchEvent(MotionEvent event){ keyboardHidden = false; super.onTouchEvent(event); return true; } //On a back press we're removing the soft keyboard so set the flag back to true public boolean dispatchKeyEventPreIme(KeyEvent event){ if(event.getKeyCode() == KeyEvent.KEYCODE_BACK){ keyboardHidden = true; } return super.dispatchKeyEvent(event); } } 

Чтобы обрабатывать изменения вращения, добавьте свой манифест android:configChanges :

  <activity android:name="yourActivity" android:configChanges="orientation"></activity>