这个问题已经存在了几天,而且我自己似乎无法找到答案。
我正在为Android设备构建应用程序。应用程序将使用套接字连接到运行某个软件的PC。用户有一些按钮和东西来改变PC程序的状态 - 这部分工作得很好。基本上是使用套接字将文本发送到PC。
我还希望Android应用程序能够处理来自PC的事件。这些事件应该改变设备上的UI,以反映PC程序的状态。
为了理解我的问题,我将尝试解释应用程序的结构。 基本上,该应用程序有四个活动:
所以 - 当切换标签时,我检查标签的ListView是否为空,如果是这种情况,我将创建内容,如果没有,那么我将调用" setListAdapter(...)& #34;使用正确的" list.getAdapter()",其中list将是与选项卡相关的列表。
当从PC接收事件时,我有一个Handler来处理事件。此处理程序将解析消息,并找出要更改的UI的哪个部分,以及哪些Object与UI的这一部分相关。然后,对象的状态改变为什么 - 如果obecjt的选项卡当前打开,则视图也被更改 - 如果打开另一个视图,则布尔值将告诉选项卡中的对象已更改状态。 / p>
我试图从ListView变量中获取View并更改子元素,但是当列表不是当前列表时,这不起作用。
然后我尝试在按下选项卡时为选项卡创建一个全新的ListView,如果此布尔值显示某些内容已被更改(就像它第一次在第一时间创建的那样) - 这仅适用于一个标签。
我试图用两个标签(2和3)测试它。应用程序在选项卡1上启动。如果我然后打开选项卡2然后再打开3,则从两个选项卡向PC发送命令,一切正常。当PC向应用程序发送事件时,只有选项卡3才会实际更新。选项卡处于活动状态和非活动状态时均可使用(在激活时更新)。虽然标签2不会更新任何更改的内容。
如果我只打开标签2而不是标签3,那么标签2在两种情况下都会更新。
任何人都对这里可以做些什么有任何想法?
我已尝试过使用invalidate(),notifyDataSetChanged(),invalidateViews()等所有类型的东西,但没有任何功能。
我真的不明白为什么在创建一个全新的ListView(来自已更改的对象)时仍会显示旧的ListView。
当我选择在所有标签上使用一项活动时,我是否在脚中拍摄,或者这是其他的?
希望有人可以帮助我。
如果需要一些代码,那么请告诉哪个部分,因为应用程序包含~15个类和数千个代码行,所以我不会发布所有代码:)
干杯
答案 0 :(得分:0)
我最终为每个标签内容添加了一个活动,而不是第一个方法,其中我有一个活动,只需在按下标签时切换列表视图的适配器。
将其拆分为每个标签的活动,无论活动是否显示,都可以更改所有内容。