Элементы GridView иногда отображают неправильные элементы рисования - PullRequest
1 голос
/ 30 мая 2010

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

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

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

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

  • Obj A показывает яблоко
  • Obj B показывает банан
  • Obj C показывает канталупу

Когда происходит смещение , я получаю:

  • Obj A показывает канталупу
  • Obj B показывает банан
  • Obj C показывает яблоко

Проблема не согласована между двумя причинами (диалоговое окно поиска и поворот экрана и прокрутка экрана), но сама каждая причина является согласованной. Прокручивая несколько раз, вы обнаруживаете шаблон и появляется диалоговое окно поиска. Как я могу предотвратить это?

Ответы [ 2 ]

6 голосов
/ 30 мая 2010

Исходный код, на который вы ссылаетесь, некорректен.

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

Ключ находится в термине «переработка». Если convertView не равно null, это означает, что существует какой-то существующий View, который вы надули ранее, что Android хочет, чтобы вы заполнили новые данные на основе предоставленной позиции. Код, на который вы ссылаетесь, игнорирует эту часть.

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

0 голосов
/ 07 января 2019

У меня была та же проблема, но при других обстоятельствах. У меня был вид сетки под поиском. Когда я нажимаю поисковый запрос, чтобы ввести что-то, вид сетки перемешивается. Оказывается, в моем адаптере вида сетки отсутствовала следующая часть "else"

if(view==null){

        myview = new View(context);
        myview = layoutInflater.inflate(R.layout.single_cat_item,null);
        ImageView imageView = (ImageView) myview.findViewById(R.id.catImage);
        TextView textView = (TextView) myview.findViewById(R.id.catText);
        imageView.setImageResource(images[i]);
        textView.setText(values[i]);

    }else{
        myview =(View) view;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...