【问题标题】:Updating Listview更新列表视图
【发布时间】:2016-09-29 16:59:04
【问题描述】:

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

【问题讨论】:

  • 为什么不更永久地修改对象?
  • 你能发布你的适配器吗?
  • 永久?我还有另一个选择,就是当我回到帖子列表屏幕时,我会调用 API 再次加载帖子。但我不想在回来时再次调用帖子 API。这就是为什么我想在本地进行更改

标签: android listview


【解决方案1】:

onActivityResult() 将是正确的答案,但您并没有完成您的活动,而是按返回/主页按钮。所以在这种情况下,没有信息被传递给父活动。

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

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

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

  1. Create a fragment 类似于您的 detailActivity。它需要声明正确的interface 才能与活动通信。
  2. 让您的活动实现接口并覆盖其定义。此功能将处理按下按钮。那么是不是在这里你需要更新主arrayList。
  3. Change 当一个项目被点击时一个带有细节片段的主要片段。

我希望它可以帮助您找到代码的最终解决方案。

PD:我找到了this url,可能包含整个过程,非常详细。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      你的逻辑没有错。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-21
        • 2021-07-08
        • 2011-10-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多