我對我的ListView有一個直接的BaseAdapter。它下載一個JSON提要並在行中顯示數據。有一個ViewHolder,它包含視圖和一個名爲「Story」的數據對象。一切正常。ListView適配器在convertView被回收時會感到困惑
但是,在滾動更長的列表後,我注意到兩件事。
1)我的日誌顯示適配器在進一步向下滾動時正在重新加載饋送。這很奇怪,因爲我把整個JSON數組放入一個變量中,爲什麼它必須重新加載?
2)更重要的是,在來回滾動後,行中包含錯誤的「Story」對象。以下是getView例程的相關部分:
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
Story story = stories.get(position);
if (convertView == null) {
//create holder
holder = new ViewHolder();
convertView = inflator.inflate(R.layout.story_list_item, parent, false);
holder.titleView = (TextView) convertView.findViewById(R.id.story_list_title);
holder.dateView = (TextView) convertView.findViewById(R.id.story_list_date);
holder.story = story;
holder.imageView = (ImageView) convertView.findViewById(R.id.story_list_image);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
// configure the view
holder.titleView.setText(story.title);
return convertView;
}
夠簡單。現在奇怪的是,我可以通過消除if語句if (convertView == null)
(以及我認爲也消除了行回收)來解決問題。
但我會不會遇到內存問題這種方式?爲什麼簡單的香草版本不起作用?
感謝您的幫助。 問候, 小號
我沒有看到JSON訂閱源的下載位置,但是當您滾動速度足夠快時,視圖將在其第一個訂閱源完成下載之前得到回收。然後,第二個Feed的下載將開始,如果第一個下載完成,則它可以在某種意義上被「覆蓋」。這裏有一篇關於如何在listview中下載和顯示圖像的博客文章:http://android-developers.blogspot.com/2010/07/multithreading-for-performance.html – danh32 2012-01-09 14:22:06
謝謝我一定會追求。 – Mundi 2012-01-09 14:27:32