Listview отображает неправильное изображение в неправильном месте при загрузке миниатюры изображения из Интернета

Я использую представление списка для отображения файлов Android, т.е. показа папки и файлов с сервера.

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

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

когда есть другой тип файла, такой как аудио, видео..... или файл, необходимо показать этот значок.

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

любой может предложить мне, как преодолеть эту проблему. ниже мой метод getview() моего списка.

public View getView (int position, View convertView, ViewGroup parent) {

ViewHolder viewHolder = new ViewHolder();
if(convertView == null){
    convertView = _inflate.inflate(R.layout.layout_list, null);
    viewHolder.text = (TextView) convertView.findViewById(R.id.title);
    viewHolder.owner = (TextView) convertView.findViewById(R.id.owner);
    viewHolder.image = (ImageView) convertView.findViewById(R.id.thumb);
    convertView.setTag(viewHolder);
}else{
    viewHolder = (ViewHolder) convertView.getTag();
}

HashMap<String, String> item = (HashMap<String, String>) getItem(position);

viewHolder.text.setText( item.get("poiName").toString() );
viewHolder.owner.setText( item.get("owner").toString() );

ImageView imageView = viewHolder.image;
imageView.setTag(item.get("thumbs"));

//Is type of file is picture then display thumbnail by using imagloader class
    if (genericDAO.sub_content_type.equalsIgnoreCase(Constants.TYPE_PICTURE)) 
{

        String url = getTumbnalURL();
        viewHolder.image.setTag(genericDAO.id);
        viewHolder.image.setScaleType(ScaleType.CENTER_CROP);
        mImageLoader.DisplayImage(id, url, mActivity,viewHolder.image);

     }
     else
     {
    //Display related file icon
         viewHolder.image.setImageResource(FileUtil.getImageRelatedToFileType(mcontext, sub_ext));
     }

return convertView;

}


person Dinesh.P    schedule 19.05.2014    source источник


Ответы (1)


хотя этого кода недостаточно. Из этого кода я понял, что вы используете ленивую загрузку изображений, а mImageLoader должен запускать поток, который устанавливает для изображения значение viewHolder. вы также можете установить imageInfo как тег в другой части.

....

еще {

//Display related file icon
     viewHolder.image.setImageResource(FileUtil.getImageRelatedToFileType(mcontext, sub_ext));
     viewHolder.image.setTag(genericDAO.id);
 }

Внутри ImageLoader, когда загружается новое изображение, непосредственно перед тем, как установить новое изображение для viewHolder, проверьте правильность тега.

person vinit    schedule 19.05.2014