Почему элементы меняют порядок при прокрутке в Android GridView?

У меня есть GridView в Android, который я заполняю данными, полученными из ресурса xml.
Например, у меня есть 15 элементов в GridView, которые расположены по порядку. Общая высота превышает высоту экрана, поэтому мне нужно прокрутить, чтобы увидеть остальные элементы.
Проблема в том, что когда я прокручиваю вверх, порядок невидимых строк изменился. Это загадочное поведение, поскольку иногда элементы меняются строками друг с другом. Вот мой метод getView:

public class ImageAdapter extends BaseAdapter {
        public ImageAdapter(Context c, NodeList cuu) {
                cu = cuu;
        }
        public int getCount() {
                Log.d("Node Count",cu.getLength()+"");
                return cu.getLength();
        }
        public Object getItem(int position) {
                return position;
        }
        public long getItemId(int position) {
                return position;
        }
        public View getView(int position, View convertView, ViewGroup parent) {
                View myView = convertView;
                if (convertView == null) {
                    Node nd = cu.item(position);
                    Log.d("nodes","Pos: "+(position)+" Name: "+nd.getNodeName()+" Title: "+nd.getAttributes().getNamedItem("title").getTextContent());
                    int catID = Integer.parseInt(nd.getAttributes().getNamedItem("id").getTextContent());
                    LayoutInflater li = getLayoutInflater();
                    myView = li.inflate(R.layout.grid_item, null);
                   ImageView imageView = (ImageView) myView.findViewById(R.id.grid_item_image);
                   myView.setLayoutParams(new GridView.LayoutParams(70, 100));
                   id.download(nd.getAttributes().getNamedItem("icon").getTextContent(),imageView);
                   TextView textView = (TextView) myView.findViewById(R.id.grid_item_text);
                   textView.setText(nd.getAttributes().getNamedItem("title").getTextContent());
                   myView.setTag((Object) catID);
                }else{
                    //Log.d("nodes","Pos: "+(position));
                }
                return myView;
        }
        private NodeList cu = null;
    }

Обновление:Ну, это довольно странно. После еще одной отладки я заметил, что в GridView адаптер пропускает 13-ю позицию, то есть возвращает 1 вместо 13, а затем переходит к 14!!! (Наверное, 13 — это неудача!)

12
задан Hamed Momeni 20 May 2012 в 10:20
поделиться