Intereting Posts
Угловые Js и Trigger.io – Не удается выполнить ссылку на Android, которая работает на iOS Как setOnclickListener () на кнопке внутри ListView? Список с многофункциональным флажком в диалоговом окне оповещений? Видео не приостанавливается в фрагменте ViewPager Редактируемый текст на клике Создавайте загружаемую настраиваемую тему и применяйте ее во время выполнения Мы можем получить хромированную историю просмотров / закладки в нашем приложении для Android Неразрешенный справочник DaggerApplicationComponent Android – открыть целевые _blank ссылки в WebView с внешним браузером Пользовательский макет пользовательского интерфейса Android ProgressBar Ошибка при запуске эмулятора Android: FB :: flushWindowSurfaceColorBuffer: дескриптор окна 0x4 не найден Синхронизировать позиции прокрутки ScrollView – android Обработка прогрессивных jpeg-изображений в Libgdx Как настроить панель выполнения на Android Обратитесь к ActionBarSherlock из библиотеки

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>