Android: возможно ли основать GridView на адаптере с возможностью фильтрации? - PullRequest
0 голосов
/ 15 марта 2011

ФОН:
У меня есть GridView на основе довольно сложного Адаптера класса, который расширяет BaseAdapter .Я обнаружил, что в getView я выполняю слишком много работы, чтобы вычислить, что отображать, и что часто число элементов, которые я хочу отобразить, изменяется во время этих вычислений. getView даже вызывается несколько раз для одной и той же позиции.Похоже, что notifyDataSetChanged () вызывается слишком рано.

Это вызвало много боли в моем коде.Я переместил большую часть кода в другие подпрограммы, но обнаружил, что мне все еще нужно выполнить некоторую фильтрацию выборок во время окончательного отображения.

Я обошел это, установив item.enabled (false) , который работает, но я бы лучше исключил этот элемент все вместе.

Я могуне удается найти жизненный цикл для GridView и соответствующего адаптера, но я определил, что getCount () вызывается несколько раз перед отображением элементов и пока я могу подключить свои изменениятам, мне просто кажется, что мне приходится слишком много работать здесь.

ВОПРОС:
Можно ли использовать класс Filter в соединениях с адаптером , привязанным к GridView ?

Например, мой адаптер для GridView имеет 36 элементов для отображения, а содержащая его активность имеет TextView , установленное в значение «3», что означаетпоказывать только каждый 3-й предмет adapter.notifyDataSetChanged () вызывается и немедленно .getCount () хочет вернуть 36, что действительно мешает getView

Я знаю тамздесь не так много специфики, потому что мне нужно понять концепции, а не просто найти решение для конкретной проблемы.

Должен быть какой-то функционал или способ взглянуть на проблему, которую я пропускаю.

1 Ответ

2 голосов
/ 15 марта 2011

Вы переопределили getCount? Зачем возвращать 36 после изменения базовых данных?

Если вы сделаете getCount зависимым от базовых данных, я не думаю, что у вас возникнет эта проблема:

@Override
public int getCount() {
    return myArray.length; // or whatever your underlying data source is
}

Редактировать - Кроме того, убедитесь, что вы вносите изменения в свой набор данных до вызова notifyDataSetChanged.

...