#java #android #sqlite
#java #Android #sqlite
Вопрос:
Когда пользователь впервые загружает listview, он извлекает столбец даты из sqlitedb и заполняет список. Когда они нажимают на дату, я помещаю эту дату в переменную. Затем я хочу отобразить список элементов из массива. И затем, когда они нажимают на один из этих элементов, он снова извлекает данные из sqlitedb и заполняет.
Итак, начальный listview:
12-2010
01-2011
03-2011
04-2011
щелкните любую дату, установите mDate = clicked item
измените listview, чтобы отобразить то, что находится в массиве, тогда он будет выглядеть
Вариант 1,
Вариант 2,
Вариант 3
, Вариант 4
нажмите на опцию, установите mOption = выбранный элемент
измените listview, чтобы извлекать данные на основе mOption из базы данных.
Я знаю, как заставить listview извлекать информацию из каждого из этих источников, но мне не совсем ясно, является ли лучший способ обработки этих переключений адаптера. Есть предложения?
Комментарии:
1. Эти данные исправлены? т. Е. у вас есть три набора статических данных в течение срока службы приложения или база данных может измениться в любой момент?
2. У меня тот же вопрос: лучше ли обновлять listadapter двумя разными наборами данных, чем использовать два адаптера. Также есть возможность иметь оба набора данных в пользовательском адаптере listview и иметь в адаптере функцию переключения (обновлять / аннулировать / как бы они это ни называли в Android)
Ответ №1:
Есть два варианта. У вас может быть несколько, ListView
у каждого из которых есть свой собственный адаптер, между которыми вы переключаетесь, или у вас может быть несколько адаптеров, которые вы просто устанавливаете на ListView
. Лично я бы выбрал вариант 1, чтобы вы могли поместить ListView
s в ViewSwitcher
и анимировать переходы.
Ответ №2:
Если данные могут измениться в любой момент, я считаю, что самым дешевым и наиболее многоразовым способом было бы использовать:
public void updateContents (ListView lv, List<String> list) {
ArrayAdapter<String> myAdapter = lv.getAdapter();
myAdapter.clear();
myAdapter.AddAll (list);
lv.setAdapter(myAdapter);
}
Но это работает только в Android 4.0 или более поздней версии. Версии 2.3 и ниже не поддерживают ArrayAdapter.addAll(объект);