У меня действительно странная ошибка, которую я не могу понять. Вот поведение в видео форме http://www.youtube.com/watch?v=hHuUzNDI68w
Теперь, чтобы объяснить. У меня есть деятельность, которая называется NewsFeed. который состоит из ListView элементов канала (у каждого есть фотография, полученная из URL, который я загружаю с помощью класса кэширования, и некоторый текст на стороне), если я обычно открываю это действие, все в порядке, когда я прокручиваю все работает как положено. Однако, если я сначала нажму клавишу поиска, когда появляется клавиатура, и выберу что-то из результатов поиска, откроется действие NewsFeed.
Сначала, когда она появляется, клавиатура все еще работает, а затем через доли секунды клавиатура выключается, в результате получается, что 2 изображения сверху идентичны (их не должно быть)
Путем некоторой отладки я выяснил, что по какой-то причине viewHolder для верхних 2 строк оказывается тем же объектом на втором круговом цикле (когда клавиатура окончательно исчезла)
public View getView (int position, View convertView, ViewGroup parent) {
final HashMap<String, Object> game = getItem(position);
CollapsedNewsHolder collapsedNewsHolder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.news_collapsed_module, null);
collapsedNewsHolder = new CollapsedNewsHolder();
collapsedNewsHolder.newsPicture = (ImageView) convertView.findViewById(R.id.NewsPicture);
collapsedNewsHolder.progress = (ProgressBar) convertView.findViewById(R.id.Progress);
collapsedNewsHolder.title = (TextView) convertView.findViewById(R.id.title);
collapsedNewsHolder.newsPerson = (TextView) convertView.findViewById(R.id.newsPerson);
collapsedNewsHolder.upCount = (TextView) convertView.findViewById(R.id.upCount);
collapsedNewsHolder.commentCount = (TextView) convertView.findViewById(R.id.commentCount);
collapsedNewsHolder.relativeTime = (TextView) convertView.findViewById(R.id.RelativeTime);
collapsedNewsHolder.setTypeface();
//collapsedNewsHolder.imageCallback = new MyImageCallback(mActivity, collapsedNewsHolder.newsPicture, collapsedNewsHolder.progress, MyImageCallback.SMALL, 200);
//collapsedNewsHolder.itemClickListener = new ItemClickListener();
convertView.setTag(collapsedNewsHolder);
} else
collapsedNewsHolder = (CollapsedNewsHolder) convertView.getTag();
if ((Integer) getItem(position).get("type") != NewsFeed.POSTER)
collapsedNewsHolder.title.setTextSize(13f);
collapsedNewsHolder.newsPicture.setImageBitmap(null);
collapsedNewsHolder.progress.setVisibility(View.VISIBLE);
ImageUtil.imageCache.loadAsync((String) game.get("img"), new MyImageCallback(mActivity, collapsedNewsHolder.newsPicture, collapsedNewsHolder.progress, MyImageCallback.SMALL, 200), mContext);
collapsedNewsHolder.title.setText((String) game.get("title"));
collapsedNewsHolder.newsPerson.setText((String)game.get("newsPerson"));
collapsedNewsHolder.relativeTime.setText((String) game.get("relativeTime"));
collapsedNewsHolder.upCount.setText((Integer) game.get("upCount") + "");
collapsedNewsHolder.commentCount.setText((Integer) game.get("commentCount") + "");
//convertView.setOnClickListener(collapsedNewsHolder.itemClickListener.set((String) game.get("id"), position));
convertView.setOnClickListener(new ItemClickListener((String) game.get("id"), position));
return convertView;
}
Также здесь есть журнал ошибок, который иллюстрирует проблему. Обратите внимание на ячейки памяти и URL-адреса изображений относительно позиции в списке.
05-05 17:34:54.774: ERROR/NewsFeedAdapter(7101): Position- 0 Image- android.widget.ImageView@460977f8 Loading image- http://lh3.ggpht.com/o0vA6-MRGAXhhYYkPa1xf3WsPlDe4XnK2xWZeMhmXKBQI8eHGTAos0l1zqC_nox2MrRHKcCKNnPgzqLctsqh25e3LMc=s500
05-05 17:34:54.804: ERROR/NewsFeedAdapter(7101): Position- 1 Image- android.widget.ImageView@46142f28 Loading image- http://lh6.ggpht.com/RcTe-3O-Rywdp0zizVx6k6lSEuPpYbDYnu1UoEnWbhLk6BzwzXt29BvK5rMPAqkrhgtvxvddSTL3pBnMDeLIXVV3s0EZng=s500
05-05 17:34:55.154: ERROR/NewsFeedAdapter(7101): Position- 0 Image- android.widget.ImageView@46142f28 Loading image- http://lh3.ggpht.com/o0vA6-MRGAXhhYYkPa1xf3WsPlDe4XnK2xWZeMhmXKBQI8eHGTAos0l1zqC_nox2MrRHKcCKNnPgzqLctsqh25e3LMc=s500
05-05 17:34:55.174: ERROR/NewsFeedAdapter(7101): Position- 1 Image- android.widget.ImageView@460977f8 Loading image- http://lh6.ggpht.com/RcTe-3O-Rywdp0zizVx6k6lSEuPpYbDYnu1UoEnWbhLk6BzwzXt29BvK5rMPAqkrhgtvxvddSTL3pBnMDeLIXVV3s0EZng=s500
05-05 17:34:55.304: ERROR/NewsFeedAdapter(7101): Position- 2 Image- android.widget.ImageView@4615cd28 Loading image- http://lh4.ggpht.com/V95vJI4WHUUluC8_jHaJw011U6RO7I9rVBQsdSvwDrnUrOCN2YvqhHftr7o0YMNv8cIEBEjsnLNvIH0Y1KoB-rzw6hrKiQ=s500
05-05 17:34:55.334: ERROR/NewsFeedAdapter(7101): Position- 3 Image- android.widget.ImageView@46061610 Loading image- http://lh3.ggpht.com/-c7Ss0t2luOD-npAFZcjRYbnuasqjUNTOv75pFhyprhyzGDf8QdIz_PrJS5qcmBb0a5xrXzZWZYH7oc06eo=s500
05-05 17:34:55.384: ERROR/NewsFeedAdapter(7101): Position- 4 Image- android.widget.ImageView@4613d058 Loading image- http://lh3.ggpht.com/iCKp7kwcnbnZGD4vBb-Mz_mtSKPvST-YGeekJ9khljpG-Ua5Kl71ETdn8LLulULmq9fgNy8huooi_CfrT4W3gjqoFhiB=s500