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

Android 如何更改以前活动中的数据,android,listview,Android,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 helpfu

我有一个大致的情况,但不知道如何处理它

我有一个列表视图,每个项目都有不同的可点击视图。其中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时,addasfriend按钮仍然可见,因为AdapterArrayList有从服务器获取的旧数据,我甚至没有更改它们

当点击用户名时,我想到了StartActivityForResult。但我可能不会在单击“添加为好友”后立即返回列表视图,因为在用户配置文件上还有很多其他操作

许多应用程序都可以轻松处理一个熟悉的案例。你知道怎么做吗

多谢各位

编辑:

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


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

gsingh2011的注释有效。然而,我猜您的评论会是“我通过查询服务器来填充ArrayList,我不想经常这样做”

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

以上文字是对你问题的回答,但让我补充几点:

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

解决方案可以是使用静态布尔值(添加friend后变为TRUE),在上一个活动的onResume()处,您可以检查此布尔值并更新列表为什么不在onResume中重新填充ArrayList?我无法重新填充100多个项目的整个列表,只需一个小改动:(正如我在回答中试图解释的那样,您应该将listview和ViewProfileActivity基于相同的数据。然后您可以从其中一个(比如活动)更新ArrayList,当它再次可见时,另一个将自动更新。旁白:如果重新填充操作仅基于本地可用数据(因此,您不需要转到远程服务器)此操作甚至不会花费1000多个项目的时间。我知道,您做了大量的工作,但有时这可能是一个有效的解决方案,因为它很简单。@您的编辑:我看不出您是如何提问的,得到的答案包括您不必每次都重新填充列表,然后您可以得出结论,它们不是最佳答案“最好的”方式?我并不是说它们是最好的方式,但你能更准确地说出你认为它们有什么问题吗?目前我认为你没有完全理解给出的答案,而不是“最好的”“第一……如果你能给出更好的反馈,也许我可以进一步帮助你。如果不能,我将保留我以前的答案。