【问题标题】:Android, notify backstack fragments on some changeAndroid,在某些更改时通知 backstack 片段
【发布时间】:2018-04-27 09:25:08
【问题描述】:

通知 backstack 中的所有 Fragment 发生更改的最佳做法是什么?

我尝试使用EventBus 并且每个片段都订阅该事件,然后当发生更改时,主要活动将发布事件发送给所有订阅者。

onDestroy我取消订阅已销毁的片段。

我不喜欢这个解决方案,因为如果 backstack 中有很多片段,它可能会很重 + 同时有很多听众。

我的应用程序有无限向下钻取,从一个片段替换到另一个片段(并添加到后台堆栈),您可以再次替换(并添加到后台堆栈)等等......,没有尽头。

【问题讨论】:

    标签: android performance android-fragments event-bus fragment-backstack


    【解决方案1】:

    一种可能的解决方案是将一些数据放入共享首选项中,并在片段onResume 中读取。

    或者您可以将这些信息放在其他部分,例如配置服务器或外部服务

    显然,如果这些片段都属于同一个活动,您可以将信息放入您的活动中,然后您可以从附加的活动中读取它。

    用于远程获取数据

    您可以将您的数据放入一个只负责保存数据的单例类中。请记住,在 android 中,在某些限制情况下可能会破坏单例,因此当您的片段返回前台时,请检查单例是否为空并最终重复您的 fetch 调用

    你可以看一个例子here

    【讨论】:

    • 如果你这样做并且 onResume 你去 listView 并做类似的数据: data.clear(); data.addAll(dataFromServer) 你松开 listView 的滚动状态。
    • 当然。您能更准确地了解您的需求吗?
    • 我的意思是,您需要将数据更改为背景片段而不丢失滚动状态?
    • 我在 backstack 中有很多片段,然后我通知可以对所有这些片段进行的一些更改,我如何确保当这些片段恢复时,它们将具有最新状态?跨度>
    • 是的,但是如果您谈到服务器检索的数据,您可能会使用一种方法,如果您谈到本地偏好,您可能会使用另一种方法等等
    猜你喜欢
    • 2012-12-30
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 2021-05-16
    相关资源
    最近更新 更多