2012-02-03 37 views
0

我意识到,如果你试图扩展SimpleAdapter类,你必须使构造函数public -如何在Android中使SimpleAdapter成为Singleton?

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

但是这将让这个人(或i)可能会意外地创建一个新的适配器,对不对?

我试图让所有的数据和方法在适配器中是静态的,但它似乎不是正确的方式来做事......?对不起,我并不是说太挑剔。我只是不希望有人不小心实例化一个MySimpleAdapter实例

我应该如何让这个类是一个单身人士?

我使用SimpleAdapter的方式是,我用它作为容器来容纳动态缩小/增长列表视图中需要的所有对象。在应用中的任何时候,应该只有一个这样的容器。我是否正确地接近这个问题?

回答

1

你真的不想让适配器成为一个静态单例。这是因为它提到了上下文。通过使适配器变为静态,上下文将永远不会被垃圾收集。

如果有什么,你想保持你的List的静态实例。在每个活动中,只需传递对共享列表的引用即可。

+0

啊。这很有道理。尽管有一件事 - 如果这是一个愚蠢的问题,我很抱歉,但如果你不垃圾收集上下文会发生什么?这真的太耗费了吗?还是活动上下文存在于堆栈中?如果活动上下文(对List的引用)被置于另一个上下文之下,那么您会得到数据不一致? – 2012-02-03 11:09:00

+1

上下文是应用程序中所有资源的来源。根据您泄漏的上下文,这可能意味着引用您在应用程序中访问过的所有内容。所以是的,它可以是非常大的。 – 2012-02-03 13:49:51

1

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

+0

oops。抱歉。那是我愚蠢的错误。我应该先尝试一下。我的印象是,在Java中,当你重写一个类时,你必须公开构造函数。但我想这只是如果父类指定其构造函数明确公开 – 2012-02-03 11:04:32

相关问题