Как сделать SimpleAdapter синглтоном в Android?
Я понял, что если вы попытаетесь расширить класс SimpleAdapter, вы должны сделать конструктор общедоступным -
public MySimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to) {
super(context, data, resource, from, to);
}
но это сделает так, чтобы кто-то (или я) мог случайно создать новый адаптер, верно?
я пытался сделать все данные и методы статическими в адаптере, но это просто не похоже на правильный способ сделать что-то...? извини, я не хочу быть слишком разборчивым. я просто не хочу, чтобы кто-то случайно создал экземпляр MySimpleAdapter
Как мне сделать этот класс синглтоном?
способ, которым я использую SimpleAdapter, заключается в том, что я использую его как контейнер для хранения всех объектов, которые мне нужны, в динамически уменьшающемся / растущем списке. В любой точке приложения должен быть только один такой контейнер. я правильно подхожу к этой проблеме?
2 ответа
Вы действительно не хотите делать адаптер статическим синглтоном. Причина этого заключается в том, что он имеет ссылку на контекст. Делая адаптер статическим, контекст никогда не будет собирать мусор.
Во всяком случае, вы хотите сохранить статический экземпляр вашего List
, В каждом упражнении просто передайте ссылку на общий список и начинайте.
Почему вы должны сделать конструктор публичным? Игнорируя причины желания сделать его одноэлементным, вполне возможно объявить ваш класс, который расширяет SimpleAdapter, иметь приватный конструктор и открытый метод createInstance(), который реализует одноэлементный шаблон.