正在更新Listview

时间:2016-09-29 08:24:16

标签: android listview

我正在开发类似于Facebook android应用程序的android应用程序。在时间线屏幕上,我有帖子列表,用户可以喜欢或评论任何帖子。当用户喜欢帖子时,要突出显示类似按钮,我从数组中取出对象,更改其喜欢状态并通知适配器,以便突出显示按钮。
如果用户单击“发布”,则会打开详细信息屏幕。详细信息屏幕用户也可以选择喜欢这个帖子。现在我的问题是,如果用户喜欢详情屏幕中的帖子并返回,他应该在列表中的相同位置,并且应该突出显示该位置上的帖子的按钮。 我尝试通过使用StartActivityForResult()方法启动详细活动并传递所选对象来完成此操作。在onActivityResult()方法中,我从详细活动中获取修改后的对象。我用数组中的修改对象替换了原始post对象并通知适配器。 我不确定我的逻辑是否是好的。我需要一个更好的解决方案。我会非常感谢任何好的建议。

3 个答案:

答案 0 :(得分:1)

onActivityResult()只是正确的答案,但你没有完成你的活动,而是按回/ home按钮。因此,在这种情况下,没有信息传递给父活动。

我想到的一个解决方案是通过sharedPreferences或某些ORM修改您的对象。但是,在应用程序的每个动作中从内存中收集数据可能会让人感到不愉快。

我建议将您的detailActivity转换为detailFragment。将信息传递给父活动会更容易。在这种情况下,具有完整列表的活动将启动片段传递已单击的单个元素。之后,您将实现一个与父活动通信的接口,在这种情况下,主列表将始终正确更新。

这种方法需要很长的解释,实际上太多了。我想指出主要步骤,以便为研究提供一个起点。

  1. Create a fragment与您的detailActivity类似。它需要声明适当的interface与活动进行通信。
  2. 让您的活动实现界面并覆盖其定义。此功能将处理按下按钮。那么你需要更新主arrayList。
  3. Change一个主要片段,在单击某个项目时带有详细信息片段。
  4. 我希望它可以帮助您找到代码的最终解决方案。

    PD:我发现this网址可​​能包含整个过程,非常详细。

答案 1 :(得分:0)

是。 onActivityResult()是活动通信活动的一个很好的实现。

答案 2 :(得分:0)

你的逻辑没错。

但是如果你想让它变得简单,你可能想尝试一些第三方库,比如EventBus,它可以帮助你轻松地在诸如活动之类的组件之间传递你的信息。

在您的情况下, StickyEvent 会很有帮助。