Архив рубрики starxxx

Как программно изменить стиль текста в TextView (bold/italic)

Программное изменение стиля текста в TextView на жирный и/или курсив. 2 способа.

Способ первый:

Способ второй:

 

Как завести AlarmManager на точную дату и время

Чисто записочка самому себе, на будущее. Как сделать событие AlarmManager на точную дату и время. Все просто:

Calendar cal = Calendar.getInstance();
cal.set(2014, 2, 28, 21, 57, 00); // заводим на 28 марта 2014 года, 21:57:00

AlarmManager alarmManager = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
Intent _myIntent = new Intent(this, BroadcastReceiver.class);
PendingIntent _myPendingIntent = PendingIntent.getBroadcast(this, 0, _myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),_myPendingIntent);

Работает. Нужно только учитывать, массаракш, что у андроида месяцы начинаются с нуля, т.е. январь = 0, февраль = 1, март = 2 и т.д.

Если onListItemClick не работает в ListView…

Делал тут ListView в котором элементы списка — сложная композиция, состоящая из кучи TextView, ToggleButton, Button и т.п. вот такого вида (типа шедулер):

lvsshot

Сделал layout для элемента списка, написал собственный адаптер, настроил… Вдруг, когда, наконец, все начало отображаться как нужно, выяснилась одна неприятная особенность — список перестал реагировать на нажатие на элементе, т.е. событие onListItemClick просто не срабатывало и при тыканье пальцем элемент списка даже не выделялся. Пришлось искать…

Далее …

Программное подключение Bluetooth-гарнитуры

Понадобилось автоматизировать процесс подключения телефона к bluetooth-гарнитуре. Гарнитура с телефоном вручную спарились успешно, они друг-друга знают, проблем вроде бы быть не должно, однако! Оказалось, что мой Galaxy S3 не подключается к ней самостоятельно, если просто включить bluetooth-модуль (здравствуй, android 4.3!!!). Т.е. делаю в программе так:

BluetoothAdapter.getDefaultAdapter().enable();

Блютуз-модуль послушно включается и… ничего. Подключения к гарнитуре не происходит, хотя телефон ее знает.

Пришлось усиленно рыть интернет в поисках того, как программно инициировать подключение к гарнитуре… День потерял, зато потом за 5 минут долетел…

Далее …

Заполнение вариантов MultiAutoCompleteTextView из базы данных

Понадобилось заполнить варианты в MultiAutoCompleteTextView из базы данных. Поиски завели в какие-то дебри, приводящие к куче непонятного кода. Поскольку вникать в эти дебри не хватило квалификации да и не было особого желания, решил задачу менее по-гугловски и более проще.

Далее …

ViewPager и странное поведение контекстного меню

Сделал программку с ViewPager-ом, все красиво перелистывается, поехал дальше и наткнулся на странный баг. Фрагменты, которые у меня перелистывает ViewPager — это один и тот же класс, но в зависимости от параметров, они содержат разные элементы (соответствующий layout подключается в onCreateView() класса). Прикрутил к одному полю ввода в одном из фрагментов контекстное меню и словил странное поведение…

Смысл следующий. В onCreateView() фрагмента получил через findViewById() объект своего поля ввода и сохранил в глобальной переменной edit. Далее, сделал registerForContextMenu(edit) для этого поля ввода. Все отлично. Контекстное меню показывается, проблем нет.

Далее, в обработчике контекстного меню делаю edit.setText(«blablabla») своему полю ввода и ловлю NullPointerException: отладчик говорит, что моя переменная edit равна null!

Далее …

Пробел как разделитель вариантов в MultiAutoCompleteTextView

Понадобилось мне в программе поле для ввода фамилии сотрудника. Список сотрудников в базе данных имел вид:

  • Иванов И. И.
  • Петров П. П.
  • Сидоров С. С.

Сотрудников было много, использовать Spinner неудобно: долго листать. посему решил использовать MultiAutoCompleteTextView — удобно, набрал две-три буквы фамилии — и выбрал из списка нужную. Однако легко это сделать у меня не получилось, ибо разделитель вариантов в MultiAutoCompleteTextView  не символ, а класс Tokenizer. В классе MultiAutoCompleteTextView есть готовый класс Tokenizer, называется CommaTokenizer, устанавливается вызовом метода setTokenizer():

Далее …

Заполнение spinner из базы данных через Cursor Loader

Понадобилось мне тут как-то заполнить Spinner из базы данных. Поскольку, даже с собственной базой приложения я работаю через контент-провайдер, прикрутил к спиннеру SimpleCursorAdapter и заполнял его через CursorLoader. Все оказалось достаточно просто. Для начала, добавляем к классу нашей Activity реализацию интерфейса LoaderCallbacks. Поскольку CorsorLoader используется для асинхронных запросов к контент-провайдерам, методы интерфейса LoaderCallbacks будут вызываться по окончании запросов:

Далее …

rawQuery в ContentProvider

В процессе написания программы возникла необходимость выполнить к базе данных сложный запрос, с кучей JOIN и условий. При прямой работе с БД достаточно было использовать rawQuery(queryText, params), однако я использовал в своей программе контент-провайдер, дабы соответствовать высоким стандартам google )))

Оказалось, что контент-провайдеры не предназначены для таких выкрутасов, ибо стандартный метод контент-провайдера query() выглядит так:

 public Cursor query(Uri uri, String[] projection,
    String selection, String[] selectionArgs, String sortOrder);

Далее …