Android:一个Activity中有多个ListViews - 只有一个会更新图形

时间:2012-01-11 15:18:39

标签: android listview adapter

这个问题已经存在了几天,而且我自己似乎无法找到答案。

我正在为Android设备构建应用程序。应用程序将使用套接字连接到运行某个软件的PC。用户有一些按钮和东西来改变PC程序的状态 - 这部分工作得很好。基本上是使用套接字将文本发送到PC。

我还希望Android应用程序能够处理来自PC的事件。这些事件应该改变设备上的UI,以反映PC程序的状态。

为了理解我的问题,我将尝试解释应用程序的结构。 基本上,该应用程序有四个活动:

  • 启动活动,显示启动画面,并在设定的时间后启动下一个活动
  • 连接器活动,其中包含用户将键入PC的IP的输入。当设备连接到PC时,PC将向设备发送一个基本包含程序状态的xml文件。解析此xml文件,在解析时没有错误,此活动将启动下一个活动。
  • 下一个活动是TabActivity,创建1到5个选项卡,具体取决于解析的xml。每个选项卡都需要一个活动来处理每个选项卡的内容。在这里,我选择对所有标签使用一个活动。
  • 最后一项活动是内容活动。这是一个ListActivity。解析xml时,将创建项目并将其分为5个类别 - 每个类别一个选项卡。首次选择选项卡时,将生成内容,并为该选项卡创建ListView对象。对于类别中的每个项目,我会扩展布局(xml)并根据对象的状态设置正确的图形。这很好用。在标签之间切换也很好。

所以 - 当切换标签时,我检查标签的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个类和数千个代码行,所以我不会发布所有代码:)

干杯

1 个答案:

答案 0 :(得分:0)

我最终为每个标签内容添加了一个活动,而不是第一个方法,其中我有一个活动,只需在按下标签时切换列表视图的适配器。

将其拆分为每个标签的活动,无论活动是否显示,都可以更改所有内容。