面试之 listview优化
2019獨角獸企業重金招聘Python工程師標準>>>
摘用別人的,謝謝作者
Adapter的作用是界面與數據之間的橋梁,通過設置適配器至ListView控件后(如調用ListView的 setAdapter(ListAdapter adapter) ),列表的每一項會顯示至頁面中。其實,當列表里的每一項顯示到頁面時,都會調用Adapter的getView方法返回一個View,如: @Override public View getView(int position, View convertView, ViewGroup parent) { return super.getView(position, convertView, parent); } 我們看一看下面的這段代碼: public View getView(int position, View convertView, ViewGroup parent) { View newView = mInflater.inflate(R.layout.list_item, null); ((TextView) newView .findViewById(R.id.text)).setText(DATA[position]); ((ImageView) newView .findViewById(R.id.icon)).setImageBitmap( (position & 1) == 1 ? mIcon1 : mIcon2); return newView ; } 上面的代碼塊中,我通過LayoutInflater.inflate(,)將Layout文件–layout.list_item轉換為View. (注:Layout也是View的子類,但在android中如果想將xml中的Layout轉換為View放入.java代碼中操作,只能通過Inflater,而不能通過findViewById()) 這時,如果我的ITEM項有數以千條這樣多或更多呢,再以上面代碼塊的寫法,后果自己想想吧。
于是,改用其它一種寫法: public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = mInflater.inflate(R.layout.list_item, null); } ((TextView) convertView.findViewById(R.id.text)).setText(DATA[position]); ((ImageView) convertView.findViewById(R.id.icon)).setImageBitmap( (position & 1) == 1 ? mIcon1 : mIcon2); return convertView; } 這時,上面的代碼是不是好了很多?系統將會減少創建很多View。性能得到了很大的提升。 到這里,問一下,還有沒有優化的方法呢,是有的,請看————》》: public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView = mInflater.inflate(R.layout.list_item_icon_text, null); holder = new ViewHolder(); holder.text = (TextView) convertView.findViewById(R.id.text); holder.icon = (ImageView) convertView.findViewById(R.id.icon); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.text.setText(DATA[position]); holder.icon.setImageBitmap((position & 1) == 1 ? mIcon1 : mIcon2); return convertView; }
static class ViewHolder { TextView text; ImageView icon; } 這樣系統性能會得到更大的提升。 希望可能幫助到大家。這也是平時面試當中面試官經常會問到的”ListView的優化”的問題。
轉載于:https://my.oschina.net/chaloongjir/blog/209731
總結
以上是生活随笔為你收集整理的面试之 listview优化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JAVA学习笔记(8)
- 下一篇: 删除vss文件批处理