Если в адаптере для GridView Вы пытаетесь повторно использовать созданные дочерние элементы View, то после каждой перерисовки все эти дочерние элементы будут менять свой порядок. Следующий код демонстрирует эту проблему:
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null){
v = new View();
// ....
}
return v;
}
Чтобы избавится от проблемы необходимо не использовать переменную View (в данном случае - convertView), переданную в метод getView(). То есть, вышеприведенный код должен иметь вид:
public View getView(int position, View convertView, ViewGroup parent) {
View v = new View();
// ....
return v;
}
Чтобы не пересоздавать все экземпляры View при каждой перерисовке, как вариант, можна использовать массив элементов View, который самостоятельно заполнять.