该应用程序有一个 SQLite 数据库。使用TabLayout,选项卡分别有自己的片段。在打开每个单独的 TabLayout 选项卡(即从片段)时加载数据是否正确,或者在 Activity 中加载数据是否正确?
如果一般我们不是在谈论 TabLayout,而只是谈论使用 Activity 和 Fragment 的应用程序,那么在哪里执行这样的“操作”?有人直接在fragment中写,但有时我看到Activity中哪里有昂贵的操作,数据只是简单的转移到fragments中输出。你能告诉我哪一个是正确的,为什么?
Fragment,正如其创建者所设想的那样,包含对一段接口及其逻辑的描述。因此,从他们的角度来看,您应该在片段中接收数据,而不是在活动中。Activity 作为一个全局控制器,但如果你把所有的逻辑都塞进去,即使在一个简单的项目中,它也会变成一个可怕的怪物。
关于“仅将数据从活动传递到片段以进行显示” - 这种方法是合适的,但并非总是如此。
让我举个例子:你有一个服务的用户列表。您将其显示在一个片段中。您已经为每个用户加载了完整数据,但现在只显示昵称和头像。当您单击列表项时,会出现一个新片段,其中包含有关所选用户的详细信息(真实姓名、上次登录等)。如果您立即加载有关用户的详细数据以显示列表,则有关所选用户的数据可以立即传输到片段。
反之亦然:您有一个对话列表,您可以为每个对话下载该对话中的最新消息以显示在列表中。当你进入对话时,你不能在那里传递数据,对话片段本身必须来自内容提供者的请求。如果你第一次请求数据,收到后才尝试打开fragment,你会得到一个非常无响应的界面,这也允许一堆额外的东西,例如,你可以点击一个对话,不要等待它打开并单击另一个。它必须被处理
总结一下:如果你需要打开一个片段来显示已经处于当前状态的数据——你可以简单地传递数据,但要小心。最好始终联系显示数据的内容提供商。实现接口的反应式方法正在将我们推向相同的方向。如果您使用网络 - 缓存请求,如果使用本地数据库 - 应该没有问题