Comments 12
Сделайте, пожалуйста, cut перед разделом «Кастомная клавиатура под Android».
И вынесите листинг под спойлеры.
Спасибо.
И вынесите листинг под спойлеры.
Спасибо.
Отличный пример, как делать НЕ надо. Если вам нужна клавиатура в приложении, соизвольте генерировать её, а не описывать каждую кнопку руками.
"программный песок" – это творческое переосмысление синтаксического сахара?
Позже я соберу zip-архив нашего примера и закину куда-нибудь на диск. И оставлю потом ссылку здесь на скачивание.
Тут стало очень толсто :)
<cut/> что не вставили то в тексте статьи после первого абзаца?
Было бы здорово, если бы данное решение было оформлено в виде библиотеки, чтобы была возможность переиспользовать в других проектах.
Простите, но в примере с ExecutorThread что-то явно не то. Вы передаёте туда TextView, и делаете setText не из main потока. У вас точно всё работает и не падает?:)
Это не статья для начинающих, автор сам только начал писать под Android. Неокрепшим умам может быть очень вредно.
1. KeyBoardListener — гвоздями прибит к MainActivity, это какой-то жуткий анти-паттерн. Сама клавиатура должна предоставлять интерфейс, позволяющий подписаться на нажатие клавиш. А тут есть Listener, который знает о том как клавиатура внутри устроена, editText сам обновляет и MainActivity в конструктор принимает.
2.
3. То что Вы назвали «библиотека в Android Java ExecutorServise» никакая не библиотека, а просто класс из стандартного пакета java.util.concurrent.
4. ExecutorThread прекрасен во всех отношенях.
Это прям беглым взлядом и про совсем ахинею.
Автор пару советов:
1. Сделайте клавиатуру отдельной вьюхой.
2. Почитатйте про Executor'ы, у вас нет понимания зачем они вообще нужны.
1. KeyBoardListener — гвоздями прибит к MainActivity, это какой-то жуткий анти-паттерн. Сама клавиатура должна предоставлять интерфейс, позволяющий подписаться на нажатие клавиш. А тут есть Listener, который знает о том как клавиатура внутри устроена, editText сам обновляет и MainActivity в конструктор принимает.
2.
«А почему мы не сделаем hide или не вызовем метод gone?» А я вам отвечу, это связано с жадным сборщиком мусора android. Если мы вызовем этот метод, то все указатели на кнопки пропадут, и все отклики не будет работать.Видимо имеется в виду setVisibility у View. Конечно никакой «жадный» GC ничего не будет собирать, на все вьюхи останутся жесткие ссылки.
3. То что Вы назвали «библиотека в Android Java ExecutorServise» никакая не библиотека, а просто класс из стандартного пакета java.util.concurrent.
4. ExecutorThread прекрасен во всех отношенях.
- Принимает TextView, что черевато утечками и крашами. Activity уже давно умрёт, а поток из executor'а будет всё ещё держать ссылку на TextView, а значит и на всю activity + будет ещё и пытаться что-то обновить на уже «мертвой» activity.
- doWork каждый раз вызывает newSingleThreadExecutor, что убивает всю идею executor'ов.
Это прям беглым взлядом и про совсем ахинею.
Автор пару советов:
1. Сделайте клавиатуру отдельной вьюхой.
2. Почитатйте про Executor'ы, у вас нет понимания зачем они вообще нужны.
Спасибо, большую часть ошибок поправил. TextView — не падает, я проверял. Согласен, жуткий анти-паттерн. Поправил. Мог бы улучшить, если бы знал, как вызвать onBackPressed() внутри класса. И по поводу setVisible(), у меня действительно пропадали указатели, потом где-то вычитал, что это связано со сборщиком мусора, сейчас переделал — всё заработало
Sign up to leave a comment.
Разработка под Android и решение проблем связанных с разработкой