Новое в Android: нет обновления экрана через работающий поток или нет экрана вообще. Нужны подсказки - PullRequest
0 голосов
/ 13 мая 2019

У меня сложности с моим приложением.Я застрял и понятия не имею, как решить мою проблему, которая заключается в том, что либо нет обновления графического содержимого при получении данных UDP (выполняется выполняемым потоком), либо вообще нет графического объекта - просто пустой экран.Приложение доступно здесь, и я считаю, что это будет самый простой способ его рассмотреть.

https://github.com/psedlos/android_base_app commit 21 would be most accurate https://github.com/psedlos/android_base_app/commit/d451c9ae4480bcfcbf3b951e2e6d87eec376b162

Как я вижу это приложение:

В отдельном классе есть основной контейнер данных MainContainer, который предполагает хранение целых данных, что упрощает доступ к ним.Он также имеет функцию для изменения графического изображения кнопки на основе полученных данных.

В самом начале я назначаю все кнопки для него, немного заполняю их некоторыми данными.

Затем приложение создает все onClickListeners изатем запускается выполняемое действие прослушивания UDP.Когда он приходит, он анализирует данные, обновляет основной контейнер и запрашивает обновление графического объекта.

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

Я также пытался сделать инвалидом (), но снова у меня ничего не получилось.Могу я попросить у вас несколько базовых советов, как мне это сделать?Каков на самом деле лучший способ создать такое приложение?Моя идея с этим приложением неверна с самого начала?

1 Ответ

0 голосов
/ 17 мая 2019

Я нашел очень полезный способ заставить интерфейс обновляться при поступлении новых данных (в моем случае через UDP). Бит кода, который находится внутри класса MainContainer и манипулирует представлениями, должен храниться внутри обработчика:

new Handler(Looper.getMainLooper()).post(new Runnable() {
    @Override
    public void run(){
        [code that manipulate views]
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...