Android 之如何優化 ListView

g3mc 9年前發布 | 19K 次閱讀 Android Android開發 移動開發

眾所周知,在開發過程中,ListView的優化是比較重要的

那么,如何去優化呢?


ListView的提升效率,其實就是在于adapter中getView方法的優化,那么如何使的getView優化呢?


1、在getView() 中重用了convertView,很大程度上的減少了內存的消耗。通過判斷convertView是否為null,

     是的話就需要產生一個視圖出來,然后給這個視圖數據,最后將這個視圖返回給底層,呈獻給用戶。 

     

比如:listview 屏幕顯示10條數據,當用戶滑動listview的時候,第11條數據出現的時候,第一條數據

就會被android本身提供的  Recycler,將這條item(View)放進RecycleBin(回收站)中,然后顯示新視

圖的時候,從RecycleBin中重復用這個View。就不會造成每次都要去創建新的View,而節約了大量的資源。


2、自身寫一個ViewHold 類,這個ViewHolder,用來標識view中一些控件,方便進行一些事件相應操作的設置,

這樣就不用每次getView() 的View只要找一次控件就好了,不用每次都去尋找


代碼表示如下:

// getView 方法的優化

public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = LayoutInflater.from(parent.getContext()).inflate( R.layout.activity_list_item, null); ViewHolder viewHolder = new ViewHolder(convertView); convertView.setTag(viewHolder); } ViewHolder viewHolder = (ViewHolder) convertView.getTag(); viewHolder.fillView(getItem(position)); return convertView; }

// 這個類是View的顯示,也就是Listview的每條顯示的東西 class ViewHolder { private ImageView iv_NewsImage; private TextView tv_NewsTitle; private TextView tv_NewsDate;

public ViewHolder(View convertView) { iv_NewsImage = (ImageView) convertView.findViewById(R.id.newImage); tv_NewsTitle = (TextView) convertView.findViewById(R.id.newTitle); tv_NewsDate = (TextView) convertView.findViewById(R.id.newDate); }

public void fillView(Object item) { final NewsInfo news = (NewsInfo) item; tv_NewsTitle.setText(news.getNewTitle()); tv_NewsDate.setText(getDate(news.getNewDate())); ImageLoader.getInstance().displayImage(news.getNewImageUrl(), iv_NewsImage); }

private String getDate(long time) { Date date = new Date(time); SimpleDateFormat formatter = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss"); return formatter.format(date); } }</pre>

 本文由用戶 g3mc 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!