Подтвердить что ты не робот

Проблемы с прокруткой с помощью GridView в Android

У меня возникают странные проблемы с прокруткой в ​​моем довольно простом GridView. Каждый элемент в гриде - это просто ImageView и TextView. Сама деятельность - это просто селектор приложений. Это выглядит как грубая версия основного приложения Tray в Android.

Проблема заключается в том, что, проведя несколько раз прокручивая мой взгляд, он неизбежно позволит мне прокручиваться мимо верхнего ряда значков на пустой экран, и полоса прокрутки исчезнет, ​​оставив меня застрявшим.

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

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

Это мое первое приложение для Android за пределами базового Hello World, так что, скорее всего, я просто что-то испортил в своих файлах макетов. Я также понимаю, что это, вероятно, довольно запутанное описание, поэтому я надеюсь, что кто-то испытал это, и мои поисковые способности просто не смогли его найти.

Я могу опубликовать файлы макета или другой код, если кто-то считает это полезным.

Ой, и программа построена против 1.5, но работает на 2.2 (независимо от состояния 2.2, которое было прокручено на прошлой неделе) на моем телефоне. У меня недостаточно приложений, чтобы проверить это на эмуляторе, но, вероятно, возможно что-то придумал, если кто-то сочтет это необходимым.

Заранее благодарим за любую помощь по этой проблеме.

4b9b3361

Ответ 2

У меня была такая же проблема, но я пишу только GridView только ImageView, поэтому ответ pengwang мне не помог. Я нашел объяснение этой ошибки https://code.google.com/p/android/issues/detail?id=16218

Проблема заключается в том, что GridView в настоящее время не обрабатывает элементы с разной высотой.

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

Ответ 3

Кажется, что если вы прокрутите нижнюю часть GridView и вернетесь очень быстро пару раз, вы, в конце концов, заметите, что элементы представления переместились в одно место на "левое" место, откуда они были. Когда это произойдет, вы можете прокручивать все верхнюю часть GridView. Когда вы достигнете вершины списка, элемент 0 не отображается, имея на своем месте пункт 1 и только черную над этой строкой.

Щелчок по любому элементу в этой ситуации сбрасывает список, и все возвращается в норму.

Это должно быть ошибка. Он очень воспроизводимый, и я не думаю, что что-то, что я делаю, вызывает смешение. На этом этапе добавление в адаптер списка остановилось.

Сейчас я работаю с Android 2.3.3.

Ответ 4

Я сам столкнулся с этой самой проблемой - у меня есть сетка изображений с разной высотой. Прочитав документ разработчика Android на GridView, GridView.LayoutParams и GridLayout, я сделал две вещи, которые исправили мою проблему:

  • найдите самое высокое изображение в каждой строке и сохраните высоту в карте строки → rowHeight. Каждое загружаемое изображение имеет информацию о ширине и высоте, поэтому для меня это легко сделать, переопределив мой метод addAll (items) адаптера.

  • в getView(), я создаю GridView.LayoutParams(MATCH_PARENT, getRowHeight (position)), который устанавливает каждый элемент сетки на максимальную высоту строки для конкретной строки.

  • оберните мой ImageView внутри LinearLayout. Я пробовал другую компоновку, но LinearLayout - это тот, который работает. Установите android: scaleType = "fitCenter" и android: adjustViewBounds = "true" для изображения.

После более чем трех шагов я, наконец, получил сетку, чтобы выглядеть правильно, у них разные высоты, и нет проблем с прокруткой.