Атрибут getView () запрашивает позицию 0 дважды перед каждой позицией. Зачем?

Я прочитал все остальные сообщения в getView () и не нашел никаких решений. У меня есть GridView с SimpleCursorAdapter. Я регистрирую (позицию); В getView (), и я вижу такой шаблон:

0,0,1,0,0,2,0,0,3,0,0,0,0,0,0,5 и т. Д. Это означает, что мне нужно построить 3 представления, поскольку они прокручиваются для каждого нового отображаемого представления и Это изменчиво и лагги. Почему это делается? У меня нет ничего очевидного, как установка моего gridview на wrap-content или что-то еще странное. В моем коде нет ничего странного. Одна вещь, которая может быть фактором, состоит в том, что каждый элемент может иметь разную высоту в зависимости от длины текста, который я показываю.

Я в настоящее время отлаживаю 4.2.2 Galaxy Nexus.

Индекс 0 запрашивается в проходе сетки / макета.

Вопрос не содержит подробностей, но следующее может объяснить шаблон, который вы видите:

  • GridView находится в макете, которая требует двух измерений / макетов (например, LinearLayout с весами, RelativeLayout с правилами зависимости макета). Это объясняет две позиции 0s.

  • Каждый getView() заставляет родителя повторно компоновать. Это объясняет положение 0 после каждой позиции.

Убедитесь, что высота вашего списка не является wrap_content

И сделать его fill_parent.

Надеюсь, это поможет .

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

Меня это не беспокоит так сильно, что это происходит немного, но меня это беспокоит, когда это делается много, и когда прокручивается сетка, делая сетку длинноногим. Особенно, когда он перекрашивает элементы, которые даже не видны.

Способ, которым я решил это, заключается в том, что когда запрашивается getView (0), и элемент 0 не должен быть замечен, то есть измерение выполняется, я возвращаю фактическое представление, которое уже было нарисовано (повторное использование преобразованного представления), избегая перекраивания позиции 0.

 @Override public View getView(int position, View convertView, ViewGroup parent) { // Workaround Android requesting position 0 even though it doesn't draw it. AbsListView listView = (AbsListView) parent; int firstVisiblePosition = listView.getFirstVisiblePosition(); if (position == 0 && firstVisiblePosition > 10) { if (convertView == null) { convertView = actualPaint(position, convertView, parent); } return convertView; } convertView = actualPaint(position, convertView, parent); return convertView; } 
Intereting Posts
AsyncTask, Фрагменты, Представления и Backstacks Черный экран, показанный после намерения камеры Отсутствие событий нажатия клавиш для определенных клавиш в браузере Android Невозможно изменить размер дочерних элементов линейной раскладки в встроенном модуле android Android Studio: импорт проекта в существующий проект Изменение ориентации, потеряв все элементы списка Отладка устройства Android в Интернете Android – можно ли одновременно подключать 3G и Wi-Fi? Нажмите, чтобы показать изображение в ImageView Драйвер Google Android USB и ADB 3D-карусель для Android? Соответствующая альтернатива PopupMenu для pre-Honeycomb Почему Android использует несколько контекстов, и каждый отличается? Android QR-сканер / приложение для чтения автономно, без необходимости устанавливать приложение zxing – это незаконное / юридическое – все, что доступно отдельно от zxing Получить номер телефона входящего и исходящего звонка