2012-01-10 2 views
0

У меня есть приложение, в котором основное действие генерирует список, а в основном действии есть много вкладок, которые фильтруют список и перечисляют подмножество всего списка в настраиваемом ListView с флажками.Фильтрация списка в разных действиях

У меня есть адаптеры в каждом из вкладок и есть потоки, запущенные в различных onCreate() s, которые фильтруют основной список и добавляют соответствующее подмножество в свой собственный адаптер. Я сохраняю статус флажка в SharedPreferences каждый раз, когда используется флажок.

У меня возникла проблема с синхронизацией флажков между различными ListActivities. Когда я проверяю поле в 1 ListActivity и переключаюсь на другую вкладку, он там не обновляется. Только когда я выхожу из приложения и перезапускаю его, основное действие повторно генерирует список, читает SharedPreferences и обновляет все флажки.

Как это сделать мгновенно, чтобы различные ListActivities различных вкладок всегда синхронизировались?

Спасибо.

ответ

0

Я бы предпочел, чтобы вы использовали фильтры на адаптерах (т. Е. Применяете собственные фильтры, которые читаются из выбора флажка). Имеет так много потоков: а) запутывает для программиста; б) источник проблем синхронизации. Каждый ArrayAdapter реализует фильтруемый интерфейс, и вы можете переопределить метод getFilter(), чтобы вернуть собственный фильтр. В этом фильтре вы можете отфильтровать элементы до того, что вам нужно. Я думаю, что этот пост вам поможет: How to write a custom filter for ListView with ArrayAdapter. Вам, вероятно, потребуется прочитать настройки в каждом из фильтров, которые вы реализуете.

+0

Спасибо. Как реализовать фильтр на основе значения int, а не CharSequence? performFiltering() и publishResults(), похоже, принимают только параметры CharSequence. – user1118764

+0

Также, как мне получить доступ к адаптеру, который определен/инициализирован в другом действии. Я попытался сделать это, передав адаптер другой активности моему SetListAdapter(), но я получил пустой список, несмотря на то, что его getCount() показывает, что он полностью заполнен. Я отлаживал его и обнаружил, что getView() адаптера вообще не вызывается. – user1118764

+0

Вы не можете изменить подпись методов точно. Но я думаю, что вам не нужно - если я правильно вас понял, вы можете просто игнорировать переданное значение и прочитать int из настроек. Если я ошибаюсь, и вам все равно нужно передать значение, вы можете использовать String.valueof (your_int) и десериализовать метод методом Integer.valueOf (char_seq.toString()). –

Смежные вопросы