如何更改以前活动中的数据

时间:2012-12-12 06:59:32

标签: android listview

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

我有一个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中更新该值?

1 个答案:

答案 0 :(得分:0)

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

更一般地说,gsingh的评论可以转化为:你应该将你的适配器和'ViewProfileActivity'建立在相同的数据上。您可以通过在两者之间共享ArrayList(作为静态成员或公共成员或任何您想要的任何内容)来实现此目的。当您从“ViewProfileActivity”中更改某些内容后,一旦切换回它,ListView将自动更新(因为将再次调用其适配器上的getView(),这将根据新数据生成视图)。

上面的文字是对你问题的回答,但我要补充一些其他的评论:

  • 你说你是在asynctask中向服务器发送信息。您应该将此更改为使用(意图)服务。当您的活动放在后台时,您无法保证您的数据将完全发送。如果您将此服务器同步委派给服务,它将确保您的流程保持足够长的时间以完成发送。
  • 一旦你有了这项服务,这将是一个放置你的“共享数据”的好地方,如上所述。您也可以使用一个小型数据库,让服务只处理本地数据库和远程服务器之间的同步。然后你有一些东西开始看起来像一个REST实现,你的设备在本地缓存远程数据,但最终只是可视化远程服务器的状态。您可以在处理REST服务器时查找出色的Google i / o演示文稿。如果您对REST部分不感兴趣,那么此演示文稿也很好,因为(可能更重要的是)它会向您显示当您希望保证数据成功持久性时必须考虑的事项。