Intereting Posts
Почему я не постоянно получаю уведомления com.android.vending.billing.PURCHASE_STATE_CHANGED? Разбор веб-страницы с Jsoup. Почему поведение на Android отличается? Захват экрана GLSurfaceView для растрового изображения Ошибка: android.database.sqlite.SQLiteException; Рядом с «student_name»; Синтаксическая ошибка (код 1); При компиляции: CR Подход к изображениям Android в БД Введите ключ, начинающий новую строку в EditText вместо отправки текста (Android) Создать собственный адаптер в Android? Плохие данные акселерометра с вибрацией Android usb мыши правой кнопкой мыши правильное поведение (ICS) Как приостановить и возобновить загрузку с удаленного сервера на SDCard Представление интерфейса пользовательского интерфейса для Ember.js HTM5 => Приложение «Телефонный зазор» (или альтернативный стек) Лучший выбор для представления видео для iOS и Android Android: Как я могу сделать горизонтально прокручиваемые элементы в вертикальном списке? Как разместить изображение над другим в приложении Android? HttpURLConnection не работает на Android 4.0

Установить текст в TextView в плохой производительности обработчика

Поскольку Android не поддерживает показ дня для даты, я добавил TextView в свой макет.

На DatePicker я ставлю onDateChangedListener. Когда дата изменяется, я определяю день недели, а затем устанавливаю ее с помощью обработчика, чтобы убедиться, что это сделано в потоке пользовательского интерфейса:

// this is being called when the date changes on the DatePicker public void onDateChanged(DatePicker view, final int year, final int monthOfYear, final int dayOfMonth) { String dayOfTheWeek = null; // some code here to set the 'dayOfTheWeek' string h.sendMessage(h.obtainMessage(0, dayOfTheWeek)); } final Handler h = new Handler() { @Override public void handleMessage(Message msg) { dayOfWeekTextView.setText((String)msg.obj); } }; 

Моя проблема: когда я просматриваю дни в виджетах ( Android 4.0 U I), это негладко! Я проверяю, в чем проблема, и не так, как я определяю, что такое String, это действительно setText() в обработчике. Комментируя, что часть uit и все в порядке. Также устанавливая там dayOfWeekTextView.setText("SOMETHING'); ( dayOfWeekTextView.setText("SOMETHING'); ) дает ту же проблему. Это DatePicker к DatePicker .

Является ли setText() действительно большим действием? Wunderlist показывает день недели, и там он работает гладко, но я просто не могу понять, как они это делают.

Я тестировал его только на своем HTC One X Любая идея?

Редактировать:

Я узнал, почему он гладко в Wunderlist! Я использую то же, что и они, DialogFragment. Вы можете установить заголовок в диалоговом окне, и именно это использует Wunderlist вместо TextView. Поэтому я собираюсь использовать это (и выглядит лучше);)

Поэтому при выполнении 'getDialog (). SetTitle (dayOfWeek)' нет проблем. Тем не менее остается вопрос: почему setText является медленным в потоке пользовательского интерфейса …?

РЕШЕНИЕ Очень сексуальное и грязное решение было бы создать 7 TextView и переключить видимость одного из них. До того дня, когда неделя продлевается до 8 дней, этот подход должен работать с гораздо более высокой производительностью.


В отдельном примечании это может быть связано с параметрами макета вашего текста. Возможно, вы захотите дать ему дополнительное пространство, или, другими словами, макет не должен быть вызван setText. Не уверен, что это происходит.

Плохая производительность может быть результатом пересчета макета. Если ширина текстового поля является оберткой, то каждый раз, когда текст изменяется, макет обновляется. Попробуйте установить ширину текста.

Попробуйте этот формат:

 t1.setText(""+string_name); 

Я использовал этот формат для установки текста как в TextView, так и в EditText

Я попытался реализовать то же самое с использованием аналогичного подхода «обработчик», который вы заявили, и, как оказалось, он работает очень хорошо.

Попробуйте этот код:

 final DatePicker dp = (DatePicker)findViewById(R.id.datePicker1); dp.init(2012, 6, 17, new OnDateChangedListener() { @Override public void onDateChanged(DatePicker view, int year, int monthOfYear, final int dayOfMonth) { handler.post(new Runnable() { @Override public void run() { TextView tv = (TextView) findViewById(R.id.textView1); // some code here to set the 'dayOfTheWeek' string tv.setText(Integer.toString(dayOfTheWeek)); // (if you want to set a number of day instead of its name) // OR tv.setText(dayOfTheWeek); } }); } }); 

Ловушка здесь заключается в использовании класса Wrapper Integer для преобразования значения int в String. Если вы передадите « плоскость int », он выкинет исключение « Ресурс не найден» .