重用 Activity 类和 ListView 适配器实例的 Android 设计建议

标签 android model-view-controller android-activity android-listview

阅读了一些 android 的设计方法,想知道什么是实现这一目标的最佳方法?

  1. Activity_Parent 已启动,它是 DataListActivity.java
  2. 的一个实例
  3. 它包含一个 ListView 和一个相应的适配器来呈现 View
  4. 触发 AsyncTask 并将适配器实例传递给适配器以获取列表数据
  5. 获取数据后,在 doInBackground() 中准备列表
  6. onPostExecute() 在适配器上设置列表并 notifyDatasetChanged()
  7. Activity_Parent - Controller
  8. ListView - View
  9. 适配器 - 型号
  10. AsyncTask - 数据 getter
  11. 当用户想要查看此列表的过滤版本时
    • 然后另一个 Activity 从 Activity_Parent 启动并称为 Activity_Child
    • 它也是 DataListActivity.java 的实例
    • 现在我想为 Activity_Child 中的 ListView 重用模型(即适配器和数据),这样我就不必通过网络重新获取数据。

我的建议

  • StartActivityForResult() 来自父级并启动子级
  • 从父子传递适配器实例
  • 如果适配器作为上下文的引用则更新它
  • 重新使用适配器来呈现子 Activity 的 ListView

我想听听你们对此的建议。 提前致谢

最佳答案

如果我是你,首先我会问自己一个问题,我是否需要第二个 Activity?为什么不能只在适配器中使用过滤器?其次,如果你真的需要在你的第二个 Activity 中使用相同的数据,那么考虑将它设为 Parcelable 然后你可以将它传递到 Intent bundle 中,所以你真的不需要传递整个适配器,因为它是本质上不是您的数据,而是您应该只传递您的 ListView 和 Adapter 显示的项目。

UPD:如果您决定使用过滤,例如使用 ArrayAdapter,那么它已经实现了 Filterable 接口(interface),因此您只需覆盖 getFilter 方法来提供您的新过滤器,然后使用您的约束调用 getFilter().filter(..),这将执行过滤。如果你不使用 ArrayAdapter,你可以让你的 Adapter 实现 Filterable 接口(interface)并做同样的事情。此外,如果您需要一些代码示例,您可以引用 ArrayAdapter 的源代码。

关于重用 Activity 类和 ListView 适配器实例的 Android 设计建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17867616/

相关文章:

Android BLE 连接断开

model-view-controller - 输入与输出的 HTML/XSS 转义

android - 在 Activity 中模拟主页按钮行为

android - Cordova Local Notification Android Plugin 2.2升级

android - 以编程方式截取 Android 设备中当前屏幕的屏幕截图?

Android – 监听传入的 SMS 消息

model-view-controller - 授权应该是模型或 Controller 的一部分吗?

c# - 让 Rotativa PDF 在共享主机上工作

Android - 让 GMailSender 工作有问题吗?

安卓问题: Switching Between Activity in Activity Stack