Изменение адаптера listview взад и вперед?

#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(объект);