Android, Adapter: фильтрация через getView () по-прежнему оставляет серые линии - PullRequest
0 голосов
/ 23 сентября 2010

Мое приложение использует список файлов мультимедиа на телефоне, т. Е. Изображения, аудио и видео. Это также позволяет пользователю фильтровать список с помощью некоторых флажков в меню, чтобы пользователь мог выбрать, отображать или скрывать каждый тип файлов.

Я сделал это, поместив это в getView () адаптера:

        // don't show unwanted file types
        if (cmo.hasType(MediaType.AUDIO_FILE)){
            if(!prefs.getBoolean(PREFS_SHOWAUDIO, true)){
                return new ViewStub(mContext);;
            }
        }else if(cmo.hasType(MediaType.IMAGE_FILE)){
            if(!prefs.getBoolean(PREFS_SHOWIMG, true)){
                return new ViewStub(mContext);;
            }

        }else if( cmo.hasType(MediaType.VIDEO_FILE)){
            if(!prefs.getBoolean(PREFS_SHOWVIDEO, true)){
                return new ViewStub(mContext);;
            }
        }

, что довольно эффективно в том смысле, что список не показывает эти элементы. Однако ListView по-прежнему отображает серую линию размером 1px между каждым View, даже если они являются ViewStubs, то есть я вижу толстую серую линию всякий раз, когда отфильтровывается группа последовательных элементов.

Как мне избавиться от этих строк? Должен ли я создать новый массив данных, содержащий только те элементы, которые должны отображать представление?

1 Ответ

1 голос
/ 23 сентября 2010

Я думаю, что Адаптер не является хорошим местом для добавления логики списка. Это для получения и отображения данных, а не для принятия решений, что показать / скрыть. Как видите, нет способа не добавить View для данного индекса (в методе getView ()).

Вы должны отфильтровать свой список перед тем, как передать его адаптеру.

...