0

我有一个一般情况,但无法弄清楚如何处理它。

我有一个 ListView,每个项目都有不同的可点击视图。其中1个是在项目中用户名旁边添加为好友按钮。

因此,在 ListViewAdapter 的 getView() 中,我以这种方式为这个按钮实现了 onClick。

onClick(){

//make the button invisible, for UX
//change the value of is_friend = 1, in the Adapter ArrayList, which will be helpful when listView is scrolled and getView is called again, to make it visible or invisible.
//Send the info to the server as an AsyncTask
}

这工作正常。

问题:

而不是单击添加为朋友按钮,我可以单击用户名转到他的个人资料,然后单击该活动中的添加为朋友按钮。

现在,当我回到 ListView 时,添加为好友按钮仍然可见,因为适配器 ArrayList 具有从服务器获取的旧数据,我什至没有更改它们。

单击用户名时,我想到了StartActivityForResult 。但是,一旦我单击添加为朋友,我可能不会立即返回 ListView,用户的个人资料上还有很多其他操作。

许多应用程序轻松处理的熟悉案例。关于这是如何完成的任何想法?

谢谢你

编辑:

尽管下面给出的答案有效。它们不是最好的方法。

因此,更好的方法可能是调用 listViewAdapter 的静态方法以仅在其 ArrayList 中更新该值?

4

1 回答 1

0

gsingh2011 的评论有效。但是,我猜您的评论将类似于“我通过查询服务器来填充 ArrayList 并且我不想经常这样做”。

更一般地说,gsingh 的评论可以翻译为:您应该将您的适配器和“ViewProfileActivity”基于相同的数据。您可以通过在两者之间共享 ArrayList 来做到这一点(作为静态成员、公共成员或任何您想要的)。然后,当您从“ViewProfileActivity”更改某些内容时,您的 ListView 将在您切换回它后自动更新(因为 getView() 将再次在其适配器上调用,这将根据新数据生成视图)。

上面的文字是对您问题的回答,但让我添加一些其他说明:

  • 你说你正在异步任务中向服务器发送信息。您应该将其更改为为此使用 (Intent)Service。当您的活动被置于后台时,您无法保证您的数据将被完全发送。如果您将此服务器同步委托给服务,它将确保您的进程保持足够长的时间以完成发送。
  • 一旦您拥有该服务,那将是放置您的“共享数据”的好地方,如上所述。您也可以为此使用小型数据库,让服务仅处理本地数据库和远程服务器之间的同步。然后你的东西开始看起来像一个 REST 实现,你的设备在本地缓存远程数据,但最终只是可视化远程服务器的状态。您可以查找关于处理 REST 服务器的优秀 google i/o 演示文稿。如果您对 REST 部分不感兴趣,此演示文稿也很好,因为(也许更重要的是)它向您展示了当您想要保证数据成功持久性时必须考虑的事项。
于 2012-12-12T08:01:36.223 回答