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

Элементы GridView динамически меняются местами при прокрутке экрана

У меня есть макет gridview, и все элементы вставляются очень хорошо,

теперь, если я проверяю большой экран, тогда вся работа выполнена нормально, потому что не требуется прокрутка

но если я проверю на маленьком экране, то элементы будут динамически менять свою позицию,

Пример bereif приведен ниже: -

, например, у меня есть 28 элементов и упорядочено в виде сетки 7 * 4, теперь, если на первом экране отображается до 20 элементов, теперь осталось 8, пока я прокручиваю экран вниз, но теперь некоторые элементы первого или вторая строка также помещается в последнюю строку.

код здесь

public class ImageAdapter extends BaseAdapter
    {
        Context mContext;
        //public static final int ACTIVITY_CREATE = 10;
        public ImageAdapter(Context c)
        {
            mContext = c;
        }
        @Override
        public int getCount() 
        {
            // TODO Auto-generated method stub
            return providers.length;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) 
        {
            // TODO Auto-generated method stub
            View v;
            if(convertView==null)
            {
                LayoutInflater li = getLayoutInflater();
                v = li.inflate(R.layout.icontext, null);
                TextView tv = (TextView)v.findViewById(R.id.icon_text);
                tv.setText(providers[position]);
                ImageView iv = (ImageView)v.findViewById(R.id.icon_image);
            iv.setImageResource(R.drawable.icon);
            }
            else
            {
                v = convertView;
            }
            return v;
        }
4b9b3361

Ответ 1

Вы должны изменить свой метод getView следующим образом.

    public View getView(int position, View convertView, ViewGroup parent){
        // TODO Auto-generated method stub
        View v;
        if(convertView==null)
        {
            LayoutInflater li = getLayoutInflater();
            v = li.inflate(R.layout.icontext, null);
        }else{
            v = convertView;
        }
        TextView tv = (TextView)v.findViewById(R.id.icon_text);
        tv.setText(providers[position]);
        ImageView iv = (ImageView)v.findViewById(R.id.icon_image);
        iv.setImageResource(R.drawable.icon);

        return v;
    }

Ваша проблема в том, что при использовании convertView он сохраняет старые данные из первых записей. Convert view используется для предотвращения инфляции макета из ресурса, который стоит вам времени и памяти. Вы должны использовать старый завышенный вид, но установить новые данные.

Ответ 2

Я только что удалил

if(convertView==null)

работает