阅读了一些 android 的设计方法,想知道什么是实现这一目标的最佳方法?
- Activity_Parent 已启动,它是 DataListActivity.java 的一个实例
- 它包含一个 ListView 和一个相应的适配器来呈现 View
- 触发 AsyncTask 并将适配器实例传递给适配器以获取列表数据
- 获取数据后,在 doInBackground() 中准备列表
- onPostExecute() 在适配器上设置列表并 notifyDatasetChanged()
- Activity_Parent - Controller
- ListView - View
- 适配器 - 型号
- AsyncTask - 数据 getter
- 当用户想要查看此列表的过滤版本时
- 然后另一个 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/