Дублировать изображение в случае вида сетки при прокрутке сетки? - PullRequest
2 голосов
/ 10 июня 2011

Я использую сетку с примером инфлятора макета.

Я выбираю изображение с SD-карты, а имя изображения и текст извлекается из файла string.txt.

Когда я тестирую на эмуляторе (широкоэкранный), он работает нормально, но когда я проверяю его на эмуляторе с экраном, эквивалентным реальному устройству (разрешение: 240 x 320 QVGA), он идет с прокруткой при переходедо последней строки первое изображение также повторяется в последней строке.

Мой строковый файл содержит

01.png;http://abc.com/01.png;Text1|02.png;http://abc.com/02.png;Text2|03.png;http://abc.com/03.png;Text3|04.png;http://abc.com/04.png;Text4|05.png;http://abc.com/05png;Text5|06.png;http://abc.com/06.png;Text6|07.png;http://abc.com/07.png;Text7|08.png;http://abc.com/08.png;Text8|09.png;http://abc.com/09.png;Text9|10.png;http://abc.com/10.png;Text10|11.png;http://abc.com/11.png;Text11|12.png;http://abc.com/12.png;Text12

Мой код выглядит следующим образом:

    public View getView(final int position, View convertView, ViewGroup parent) {
        View v=convertView;
        //String text;
        final ImageView picturesView;
        String[] newtext = null;
        if (convertView == null) {
            LayoutInflater li = getLayoutInflater();
            v = li.inflate(R.layout.icon, null);
            //File sdcard = Environment.getExternalStorageDirectory();
            File file = new File(path,"string.txt");
            //StringBuilder stext = new StringBuilder();
            TextView tv = (TextView)v.findViewById(R.id.icon_text);
            String[] columns = null;
            //String[] url = null;


            try {
                BufferedReader br = new BufferedReader(new FileReader(file));
                String line;

                while ((line = br.readLine()) != null) {
                    columns = line.split("\\|");

                }
            }
            catch (IOException e) {
                //You'll need to add proper error handling here
            }
            newtext=columns[position].split("\\;");

            tv.setText(newtext[2]);
            tv.setTextSize(12);
            tv.setTextColor(Color.BLACK);

            mUrl = path+"s/"+newtext[0];

            name=newtext[0];

            url=newtext[1];

            final Bitmap mBitmap = BitmapFactory.decodeFile(mUrl);
            picturesView=(ImageView)v.findViewById(R.id.icon_image);
            picturesView.setImageBitmap(mBitmap);
            picturesView.setTag(R.id.icon_image,name);
            picturesView.setTag(R.id.icon_text,url);
            picturesView.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    imgname=(String) v.getTag(R.id.icon_image);
                    imgurl=(String) v.getTag(R.id.icon_text);
                    // TODO Auto-generated method stub
                    String cimagename;
                    String oimagename;
                    String cUrl;
                    String oUrl;

                    if (selectedImage != null) {
                        oimagename=selectedImage;                       
                        oUrl = path+"s/"+oimagename;        
                        Bitmap oBitmap = BitmapFactory.decodeFile(oUrl);
                        selectedView.setImageBitmap(oBitmap);
                    }
                    selectedImage = imgname;
                    selectedView = (ImageView) v;
                    cimagename=imgname;
                    cUrl = path+"c/"+cimagename;  
                    Bitmap cBitmap = BitmapFactory.decodeFile(cUrl);
                    picturesView.setImageBitmap(cBitmap);

                }
            });


        }


        return v;
    }

Iпопытался вручную проверить значение имени, т. е. (01.png до 12.png) с помощью метода Toast.makeText он прекрасно работает до 9 элементов (элементы доступны без прокрутки), он отображает от 01.png до 09.png, но затем отображает 01Снова .png вместо 10.png, затем отображается 11.png, затем 12.png.

Я не могу понять, почему 01.png появляется дважды?Я полностью застрял в этом.

Ответы [ 2 ]

0 голосов
/ 16 мая 2013

Вы можете попробовать это:

 public View getView(int position, View convertView, ViewGroup parent) {
         View MyView = convertView;
         if (convertView == null) {  // if it's not recycled, initialize some attributes
             //Inflate the layout
             LayoutInflater li = getLayoutInflater();
             MyView = li.inflate(R.layout.grid_item, null);
        } else {
             MyView = convertView;
            }
             // Add The Image!!!           
             ImageView iv = (ImageView)MyView.findViewById(R.id.grid_item_image);
             iv.setImageResource(mThumbIds[position]);

             // Add The Text!!!
             TextView tv = (TextView)MyView.findViewById(R.id.grid_item_text);
             tv.setText(names[position] );
             return MyView;
     }
0 голосов
/ 10 июня 2011

закрыть оператор if

if (convertView == null) {            
      LayoutInflater li = getLayoutInflater();        
      v = li.inflate(R.layout.icon, null);
 }  //<--add this and remove the closing brace you currently have at the above the return v;
...