【问题标题】:Best practice for refreshing a ListView with Detail Activities使用详细活动刷新 ListView 的最佳实践
【发布时间】:2017-02-01 08:46:58
【问题描述】:

问题/讨论

您认为以下场景的最佳解决方案是什么(现在,2017 年)。

你有一个列表,单元格包含一些数据: - 一个名字 - 一个星号表示该项目是否在加星标的项目中 - 一种状态

当您单击此列表项时,您会转到详细信息页面,该页面位于 可以将该项目添加到您已加星标的项目和其他一些东西 改变状态。

当您返回时,列表应该会更新,以便显示新信息 在列表中。

这在 Android 应用中很常见。

我今天如何解决这个问题

  • 使用列表视图
  • 列表数据在 onResume 函数中设置

这不是最好的解决方案。 那么你们如何在应用程序中处理这个问题,使用 ListViews,RecyclerView,...在哪里触发列表更新,...

【问题讨论】:

    标签: android listview android-recyclerview


    【解决方案1】:

    你需要做的是在你的onResume()对于第一个activity,你需要修改附在ListView Adapter的数据列表,然后调用adapter.notifyDataSetChanged()

    @Override
    protected void onResume() {
        super.onResume();
        mListOfData.clear();
        mListOfData.addAll(fetchLatestData());
        mAdapter.notifyDataSetChanged();
    }
    

    这里,mListOfData 是您传递给适配器的数据列表,fetchLatestData() 方法应该从您拥有的任何来源获取最新数据。

    【讨论】:

    • 我认为这实际上是他目前的解决方案。
    • 是的,这是我目前在我的一个项目中的解决方案,但我认为这不是最好的(实践)解决方案。
    【解决方案2】:

    当您启动详细信息活动时,请使用 startactivityforesult。你知道它是怎么工作的,对吧?还将单击的列表位置保留在 int 字段中。如果该项目被添加到详细页面的收藏夹中,请将结果设置为 result_ok。当您导航回列表活动时,在 onactivityresult 方法中检查结果是否正常。如果是这样,请修改该行列表数据(记住我们将点击位置保存在 int 字段中)并通知适配器有关更改

    【讨论】:

      【解决方案3】:

      在我的应用程序中,我使用了一个管理器来处理数据。所有想要使用数据、实现接口的视图都必须由管理器注册。如果要添加/修改/删除数据,则必须在管理器类中实现一些方法。在每个方法结束时,您必须通知所有已注册的视图数据已更改。

      此链接上的示例代码:Unable to refresh listview data within same fragments used under different tabs

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多