2012-02-03 9 views
0

私はあなたがSimpleAdapterクラスを拡張しようとした場合、あなたは、コンストラクタを公開しなければならないことに気づいた -SimpleAdapterをAndroidでシングルトンにするには?

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つだけあります。この問題に正しく近づいていますか?

答えて

1

あなたは本当にアダプターをスタティックシングルトンにしたくありません。その理由は、文脈への参照があるからです。アダプターを静的にすることで、コンテキストはガベージコレクションされません。

場合によっては、Listの静的インスタンスを保持する必要があります。各アクティビティで、単に共有リストへの参照を渡してください。

+0

Ahh。完璧な意味合いがあります。一つだが、これは愚かな質問であれば謝りますが、文脈をガベージコレクションしないとどうなりますか?それは本当にスペースを消費していますか?それとも、アクティビティコンテキストがスタック内にあり、アクティビティコンテキスト(Listへの参照付き)が別のコンテキストの下に置かれた場合、データの不一致が発生するのでしょうか? –

+1

コンテキストは、アプリケーション内のすべてのリソースのソースです。どのコンテキストが漏れているかによって、アプリケーション内で今までにアクセスしたことのあるものすべてを参照することができます。そう、それは非常に大きい可能性があります。 –

1

なぜコンストラクタをパブリックにする必要がありますか?それをシングルトンにしたい理由を無視して、SimpleAdapterを拡張するクラスをプライベートコンストラクタに宣言し、シングルトンパターンを実装するpublicのcreateInstance()メソッドを持つことができます。

+0

oops。ごめんなさい。それは私のばかげたミスでした。私はまずそれを試しておくべきだった。私は、あなたがクラスをオーバーライドするときにjavaで、コンストラクタをpublicにしなければならないという印象を受けました。しかし、私は親クラスがそのコンストラクタを明示的にpublicに指定した場合にのみだと思います。 –

関連する問題