2012-02-03 35 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

相關問題