Android – ввод текста EditText медленный

У меня есть EditText, который SLOW отвечает за ввод текста. Это отставание достаточно раздражает, чтобы заставить меня найти решение. Я провел некоторое исследование и обнаружил, что SO-поток EditText отстает при вводе текста, и он предлагает переместить код в собственный поток. Я сделал это, но я все еще испытываю отставание.

РЕДАКТИРОВАТЬ

Увидев комментарии ниже (спасибо dreamtale), я знаю, что новый поток не нужен. Но возврат кода в событие onTextChanged или afterTextChanged по-прежнему вызывает медленный ответ. Я изменил код, чтобы отразить последние изменения:

XML:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:layout_weight="1" > <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:layout_marginLeft="2dp" android:layout_marginRight="2dp" > <include android:layout_width="match_parent" android:layout_height="match_parent" layout="@layout/right_layout_header" /> </LinearLayout> <ScrollView android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:layout_marginRight="5dp" android:layout_marginBottom="5dp"> <TableLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:shrinkColumns="1" android:drawable="@drawable/light_bg" > <TableRow android:layout_width="200dp" android:layout_height="wrap_content" android:shrinkColumns="1"> <TextView android:id="@+id/tvSummaryBold" android:layout_width="wrap_content" android:textStyle="bold" android:gravity="left" android:text="@string/Summary" style="@style/IssueDetailsLabelTextView" /> </TableRow> <TableRow android:layout_width="200dp" android:layout_height="wrap_content" android:shrinkColumns="1"> <EditText android:id="@+id/txtSummary" android:layout_width="match_parent" android:layout_height="match_parent" android:hint="@string/SummaryDefaultText" android:maxLength="255" android:singleLine="true" android:layout_weight="1" /> </TableRow> <TableRow> <TextView android:id="@+id/tvCharactersRemaining" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/Gray" android:paddingLeft="5dp" /> </TableRow> </TableLayout> </ScrollView> </LinearLayout> 

Вот код для фрагмента:

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { try { vView = inflater.inflate(R.layout.submit_issue, container, false); //Setup initial "characters remaining" text. mCharsRemaining = (TextView)vView.findViewById(R.id.tvCharactersRemaining); mCharsRemaining.setText(String.valueOf(iMaxChars) + ' ' + getString(R.string.CharsRemaining)); //Event for counting the characters remaining. mSummaryEditText.addTextChangedListener(TextEditorWatcher); new LoadPOCsTask().execute(); } catch (Exception e) { Errors.LogError(e); } return vView; } 

Событие TextEditorWatcher:

 private final TextWatcher TextEditorWatcher = new TextWatcher() { public void beforeTextChanged(CharSequence s, int start, int count, int after) { } public void onTextChanged(CharSequence s, int start, int before, int count) { int iMaxCharsRemaining = (iMaxChars - s.length()); mCharsRemaining.setText("Static Text "); //Intentionally put static text to see if problem still occurs, and yes it does. } public void afterTextChanged(Editable s) { } }; 

Я не могу понять, почему он все еще отстает при наборе текста. Если я addTextChangeListener событие addTextChangeListener , то он отлично работает. Идеи?

У меня была аналогичная проблема с использованием EditText внутри ListView , которая была исправлена ​​путем изменения EditText width до 0dp с использованием взвешенной ширины для соответствия / заполнения родителя.

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

Изменить AndroidManifest :

Мой старый код

 <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="21" /> 

Мой новый код

 <uses-sdk android:minSdkVersion="8" /> 

Я просто удалил targetSdkVersion и отставание исчезло …

Когда вы вводите текст, onTextChanged вызывается снова и снова, поэтому вы снова и снова onTextChanged новый поток ( EditTextWatcherTask ). Он будет потреблять много ресурсов системы.

Кроме того, для задачи требуется много времени, чтобы завершить ее, поэтому в вашей ситуации вам не нужен поток, удалите задачу, просто поместите код вычисления в onTextChanged .

Я обнаружил, что отключение интеллектуального текста помогло.

 android:inputType="text|textNoSuggestions" 
Intereting Posts
Android L: быстрый прокрутка для RecyclerView В базе данных Sqlite, как вставить несколько строк в таблицу одновременно TYPE_ROTATION_VECTOR, TYPE_ORIENTATION дают разные результаты, которые тоже с отклонениями Как перенести изображение с его URL на SD-карту? API USB-аксессуаров на Samsung Galaxy S2 Android Что означает @hide в исходном коде Android? OnConfigurationChanged () вызов дважды при изменении ориентации Пейзаж в портрет Программный вход в систему из WebView Ссылки на скачивание виртуальных устройств GenyMotion FFMPEG нажал поток RTMP, не работающий на Android и iPhone Ввод клавиатуры в android NDK с использованием NativeActivity AsyncTask, должен ли он принять такой удар по производительности …? Использование Butter Knife в пользовательских BaseAdapter SubClass Результаты в «Невозможно ввести представления» Как я могу отобразить pdf-документ в Webview? Должен ли я оставить bluetooth-отражение взлома в производственном коде?