【问题标题】:How to make SimpleAdapter a Singleton in Android?如何使 SimpleAdapter 在 Android 中成为单例?
【发布时间】:2012-02-03 04:25:13
【问题描述】:

我意识到,如果您尝试扩展 SimpleAdapter 类,则必须将构造函数公开 -

public MySimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to) {
    super(context, data, resource, from, to);
}

但这会让某人(或我)意外地创建一个新的适配器,对吧?

我尝试将适配器中的所有数据和方法设为静态,但这似乎不是正确的做事方式...?对不起,我不是太挑剔。我只是不希望有人意外实例化 MySimpleAdapter 的实例

我应该如何让这个类成为单例?

我使用 SimpleAdapter 的方式是我将它用作一个容器来保存我在动态缩小/增长的列表视图中需要的所有对象。在应用程序中的任何位置,都应该只有一个这样的容器。我是否正确地解决了这个问题?

【问题讨论】:

    标签: android singleton adapter simpleadapter


    【解决方案1】:

    您真的不想让适配器成为静态单例。这样做的原因是它具有对上下文的引用。通过将适配器设为静态,上下文将永远不会被垃圾回收。

    如果有的话,您希望保留 List 的静态实例。在每个活动中,只需传入对共享列表的引用即可。

    【讨论】:

    • 啊。这很有意义。虽然有一件事 - 如果这是一个愚蠢的问题,我很抱歉,但如果你不垃圾收集上下文会发生什么?真的很占空间吗?还是活动上下文存在于堆栈中,并且...如果活动上下文(引用 List)被置于另一个上下文之下,那么您会得到数据不一致?
    • 上下文是应用中所有资源的来源。根据您泄漏的上下文,这可能意味着对您曾经在应用程序中访问过的所有内容的引用。所以是的,它可能非常大。
    【解决方案2】:

    为什么必须公开构造函数?忽略想要使其成为单例的原因,完全可以声明扩展 SimpleAdapter 的类具有私有构造函数并具有实现单例模式的公共 createInstance() 方法。

    【讨论】:

    • 哎呀。对不起。那是我的愚蠢错误。我应该先尝试一下。我的印象是,在 java 中,当你重写一个类时,你必须公开构造函数。但我想只有当父类明确指定其构造函数为公共时
    猜你喜欢
    • 2011-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-23
    相关资源
    最近更新 更多