優化ListView使之滾動更平滑


相關資料:https://developer.android.com/training/improving-layouts/smooth-scrolling.html

 http://stephen830.iteye.com/blog/1141532

http://trinea.iteye.com/blog/1484894

http://android-developers.blogspot.com/2009/05/drawable-mutations.html

使用ListView時,由於adapter會頻繁調用getView(),如果列表的數據比較多,就會出現ListView滾動不平滑的現象。

為了使ListView平滑滾動,列出一下幾個要點:

要點一:

在調用getView( position,  convertView, parent)時使用convertView,避免新建View;

要點二:

在聲明ViewHolder時,應當聲明成static嵌套類;

要點三:

XML布局時把ListView及其父控件的layout_height設成fill_parent或固定高度(不一定有效果);

要點四:

不要作復雜的邏輯處理,可以使用異步加載減少UI阻塞的可能。

要點五:

使用WeakHashMap。

WeakHashMap<Integer, View> weakMap= new WeakHashMap<Integer, View>();
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub

if(weakMap.get(position)==null){

convertView = LayoutInflater.from(context).inflate(R.layout.item, null);
}
holder= new ViewHolder();
holder.age = (TextView) convertView.findViewById(R.id.age);
holder.name = (TextView) convertView.findViewById(R.id.name);


holder.age.setText(position+"");
holder.name.setText("name"+position);
convertView.setTag(holder);
weakMap.put(position, convertView);
}else{

convertView = weakMap.get(position);
holder = (ViewHolder) convertView.getTag();
}
return convertView;
}

由於WeakHashMap的特性,如果要對列表進行數據操作,例如讀取item的id就會出問題。

要點六:

當需要適配的item view的高度不一樣時,滾動條就會計算每個item的高度,比較耗資源,可以設置ListVIew的屬性:

android:smoothScrollbar=“false”。



注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com