уже несколько дней занимаюсь этой проблемой и, похоже, сам не могу найти ответ.
Я создаю приложение для устройств Android.Приложение будет использовать сокет для подключения к ПК с программным обеспечением.У пользователя есть несколько кнопок и все, что нужно для изменения состояния программы на ПК - эта часть работает хорошо.В основном, отправляя текст на ПК с помощью сокета.
Я также хочу, чтобы приложение Android обрабатывало поступающие события с ПК.Эти события должны изменить пользовательский интерфейс устройства, чтобы отразить состояние программы для ПК.
Чтобы понять мою проблему, я попытаюсь объяснить структуру приложения.В основном приложение имеет четыре действия:
- Всплывающее действие, которое показывает заставку и по истечении заданного времени запускает следующее действие
- Соединение, которое имеет вход, гдеПользователь введет IP-адрес ПК.Когда устройство подключается к ПК, ПК отправляет на устройство файл xml, в основном содержащий информацию о состоянии программы.Этот xml-файл анализируется, и при анализе без ошибок это действие запускает следующее действие.
- Следующим действием является действие TabActivity, создающее от 1 до 5 вкладок, в зависимости от проанализированного xml.Каждой вкладке требуется действие, которое будет обрабатывать содержимое каждой вкладки.Здесь я решил использовать одно действие для всех вкладок.
- Последним действием является действие содержимого.Это ListActivity.При разборе xml элементы будут созданы и разделены на 5 категорий - по одной вкладке для каждой из них.Когда вкладка выбрана впервые, будет сгенерировано содержимое, и для этой вкладки будет создан объект ListView.Для каждого элемента в категории я раздуваю макет (xml) и устанавливаю правильную графику на основе состояния объекта.Это работает просто отлично.Также хорошо переключаться между вкладками.
Итак, при переключении вкладок я проверяю, является ли ListView для вкладки нулевым, и если это так, я создаю контент, а если нет, то явызовет "setListAdapter (...)" с правильным "list.getAdapter ()", где list будет списком, связанным с вкладкой.
При получении события от ПК у меня есть обработчикзаботиться о событии.Этот обработчик проанализирует сообщение и выяснит, какую часть пользовательского интерфейса нужно изменить, и какой объект связан с этой частью пользовательского интерфейса.Затем состояние объекта изменяется в зависимости от того, что - и если вкладка объекта в настоящее время открыта, представление также изменяется - если открывается другое представление, логическое значение сообщит, что объект на вкладке изменил состояние.
Я пытался получить представление из переменной ListView и изменять дочерние элементы, но это не работает, когда список не является текущим списком.
Затем я попытался создать совершенно новый ListView для вкладки.когда вкладка нажимается, если это логическое значение показывает, что что-то было изменено (так же, как оно было создано в первый раз в первый раз) - это работает только для одной вкладки.
Я пытался проверить этос двумя вкладками (2 и 3).Приложение запускается на вкладке 1. Если я затем открою вкладку 2, а затем 3, отправит команды на ПК с обеих вкладок, и все в порядке.Когда ПК отправляет события в приложение, обновляется только вкладка 3.Работает, когда вкладка активна и неактивна (обновляется, когда становится активной).Хотя вкладка 2 не обновляет содержимое при каких-либо изменениях.
Если я открою только вкладку 2, а не вкладку 3, то вкладка 2 будет обновляться в обоих случаях просто отлично.
У всех есть идеичто можно сделать здесь?
Я пробовал все виды вещей с invalidate (), notifyDataSetChanged (), invalidateViews () и т. д., и ничто не помогло.
Я действительно не делаюпонять, почему при создании всего нового ListView (из измененных объектов) старый ListView будет по-прежнему отображаться.
Я выстрелил себе в ногу при выборе использования одного действия для всех вкладок, или это что-тоеще
Надеюсь, что кто-то может помочь мне здесь.
И если какой-то код нужен, то, пожалуйста, сообщите, какая часть, так как приложение состоит из ~ 15 классов и тысяч строк кода, поэтому я не буду публиковать все:)
Ура