2013-03-15 2 views
1

Я уже просматривал SO и нашел 4 похожих вопроса, но, похоже, эта проблема различна. Я также потратил около 7 часов, чтобы решить эту ошибку, и не нашел, где я ошибся.Listview показывает неправильное изображение в первой строке

ПРОБЛЕМА:
Каждая строка в ListView содержит два изображения. Когда я запускаю действие, один или оба изображения в первой строке отображают неправильное изображение, и это происходит только при иногда после запуска. Где, иногда, строка, отображающая правильные изображения после запуска.

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

ПОПЫТАЛИСЬ РЕШЕНИЕ:
я нашел только одно решение, чтобы установить convertView = нуль в начале метода GetView. Да, это работает, изображение отображается правильно, но приводит к другим проблемам и ошибкам. Прокрутка становится негладкой, и иногда некоторые изображения становятся слишком маленькими от того, что должно быть.

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

МОЙ КОД метод
MatchAdapter.class GetView

public View getView(int position, View convertView, ViewGroup parent) { 
    Match entry = listMatch.get(position); 

    MatchAdapter.ViewHolder myViewHolder; 

    if(convertView == null) { 

     LayoutInflater inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = inflater.inflate(R.layout.match_row, parent, false); 

     myViewHolder = new MatchAdapter.ViewHolder(); 

     myViewHolder.home_team_name = (TextView) convertView.findViewById(R.id.home_team_name); 
     myViewHolder.away_team_name = (TextView) convertView.findViewById(R.id.away_team_name); 
     myViewHolder.home_logo_view = (ImageView) convertView.findViewById(R.id.home_team_logo); 
     myViewHolder.away_logo_view = (ImageView) convertView.findViewById(R.id.away_team_logo); 
     myViewHolder.venue = (TextView) convertView.findViewById(R.id.venue); 
     myViewHolder.time = (TextView) convertView.findViewById(R.id.time); 
     convertView.setTag(myViewHolder); 

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

    ImageLoader imageLoader = new ImageLoader(this.context, "com.myapps", R.drawable.team_logo); 

    imageLoader.DisplayImage("http://myapps.com/assets/images/logos/"+ entry.getHome_team_logo(), 
      myViewHolder.home_logo_view); 
    imageLoader.DisplayImage("http://myapps.com/assets/images/logos/" + entry.getAway_team_logo(), 
      myViewHolder.away_logo_view); 

    myViewHolder.home_team_name.setText(entry.getHome_team_name()); 
    myViewHolder.away_team_name.setText(entry.getAway_team_name()); 
    myViewHolder.venue.setText(entry.getVenue()); 
    myViewHolder.time.setText(entry.getTime()); 

    return convertView; 
} 

Другое родственное код:

ImageLoader.class (я не хочу этот вопрос стал слишком долго прокручивать)

Спасибо за помощь!

ответ

0

Моя догадка следующий код

вход Match = listMatch.get (положение);

слишком ранний. ListView getView многопоточен и требуется некоторое время для раздувания макета для преобразования вида. И как-то переменная ссылка стала неправильной.

Call Match entry = listMatch.get (position); после

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

+0

Это не работает. –

+0

Когда вы нашли изображения неподходящие, верны ли тексты? – NyanLH

+0

Да, текст отображается правильно. Вы можете загрузить мои приложения в игру Google для тестирования. https://play.google.com/store/apps/details?id=com.jadualbola.lite –

Смежные вопросы