2014-11-03 4 views
0

Я знаю, что этот вопрос задан раньше, и я пробовал эти решения, но это не помогло. Элементы продолжают повторяться после 9-го пункта. Вот мой код.ListView items repeating

@Override public View getView(int position, View convertView, ViewGroup parent) 
{ 
    ViewHolder holder; 
    if (convertView == null) 
    { 
     convertView = mInflater.inflate(R.layout.tile_company, null); 
     holder = new ViewHolder(); 
     holder.name = (TextView) convertView.findViewById(R.id.companyname); 
     holder.type = (TextView) convertView.findViewById(R.id.companytype); 
     holder.logo = (ImageView) convertView.findViewById(R.id.logo); 
     holder.category = (ImageView) convertView.findViewById(R.id.category); 
     holder.distance = (TextView) convertView.findViewById(R.id.distance); 
     holder.time = (TextView) convertView.findViewById(R.id.time); 

     convertView.setTag(holder); 

     new GetDistanceTime().execute(LocateOutlets.userLatlng, companyList.get(position).getCompanyLatLng(), holder.distance, holder.time); 
     holder.name.setText(companyList.get(position).getCompanyDiscout() + "% Off In Store"); 
     holder.type.setText(companyList.get(position).getCompanyName()); 
     imageLoader.displayImage(companyList.get(position).getCompanyLogo(), holder.logo); 
     imageLoader.displayImage(getCategoryImage(companyList.get(position).getCompanyType()), holder.category); 


    } 
    else 
    { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    return convertView; 
} 

static class ViewHolder 
{ 
    TextView name; 
    TextView type; 
    ImageView logo; 
    ImageView category; 
    TextView distance; 
    TextView time; 
} 

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

Что я здесь делаю неправильно?

+0

Вы проверили данные вашего товара (например, 'Array' или' ArrayList')? Coz в основном то, что делает адаптер, - это просто отображение данных вашего элемента в назначенный список. – Harry

ответ

0

Вам нужно переместить часть кода, которая связывает данные с представлениями вне инструкции if.

Элементы ListView перерабатываются. По мере того, как вы прокручиваете, элемент списка, содержащий данные из строки №1, теперь может использоваться для отображения строки # 10. Это переработанное представление отправляется getView, и поскольку оно не является нулевым, оно пропускает часть вашего кода, где вы связываете свои данные с элементами представления. Если вы не напишете о том, что в настоящее время существует, оно будет продолжать показывать данные из строки №1 (или какой-либо другой ранее назначенной ей строки).

Таким образом, вы хотите переместить часть своего кода, которая связывает данные с представлениями вне инструкции if.

ViewHolder holder; 
if (convertView == null) 
{ 
    convertView = mInflater.inflate(R.layout.tile_company, null); 
    holder = new ViewHolder(); 
    holder.name = (TextView) convertView.findViewById(R.id.companyname); 
    holder.type = (TextView) convertView.findViewById(R.id.companytype); 
    holder.logo = (ImageView) convertView.findViewById(R.id.logo); 
    holder.category = (ImageView) convertView.findViewById(R.id.category); 
    holder.distance = (TextView) convertView.findViewById(R.id.distance); 
    holder.time = (TextView) convertView.findViewById(R.id.time); 

    convertView.setTag(holder); 

} 
else 
{ 
    holder = (ViewHolder) convertView.getTag(); 
} 

    //I moved this block out of your if-statement 

    new GetDistanceTime().execute(LocateOutlets.userLatlng, companyList.get(position).getCompanyLatLng(), holder.distance, holder.time); 
    holder.name.setText(companyList.get(position).getCompanyDiscout() + "% Off In Store"); 
    holder.type.setText(companyList.get(position).getCompanyName()); 
    imageLoader.displayImage(companyList.get(position).getCompanyLogo(), holder.logo); 
    imageLoader.displayImage(getCategoryImage(companyList.get(position).getCompanyType()), holder.category); 
+0

Проблема возникает, когда я использую Universal Image Loader. Если я использую его вне if, если он продолжает перегружать неправильные изображения в мои изображения, когда я просматриваю список вверх или вниз. – Asim

+0

Является ли ваш загрузчик изображений асинхронным? Попробуйте прокрутить супер медленно (ожидая, пока каждое изображение будет полностью загружено, пока не покажет следующую строку) и проверьте, загружено ли правильное изображение. Дайте мне знать результаты. – NameSpace