日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ListView 优化

發布時間:2024/8/1 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ListView 优化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ListView 優化

Listview 優化一

viewHolder 的使用和convertView的復用
viewHolder相當于一個水果籃子,我們把要吃的水果,洗好先放到籃子了,我們要吃的時候直接吃就行了,不需要再一個一個拿去洗了,方便,省力。
首先講下ListView的原理:ListView中的每一個Item顯示都需要Adapter調用一次getView()的方法,這個方法會傳入一個convertView的參數,這個方法返回的View就是這個Item顯示的View。如果當Item的數量足夠大,再為每一個Item都創建一個View對象,必將占用很多內存空間,即創建View對象(mInflater.inflate(R.layout.lv_item, null);從xml中生成View,這是屬于IO操作)是耗時操作,所以必將影響性能。Android提供了一個叫做Recycler(反復循環)的構件,就是當ListView的Item從滾出屏幕視角之外,對應Item的View會被緩存到Recycler中,相應的會從生成一個Item,而此時調用的getView中的convertView參數就是滾出屏幕的緩存Item的View,所以說如果能重用這個convertView,就會大大改善性能。

@Overridepublic View getView ( int position, View convertView, ViewGroup viewGroup){convertView//這里是復用的viewMyViewHolder holder;if (convertView == null) {holder = new MyViewHolder();convertView = LayoutInflate.from(MainActivity.this).inflate(R.layout.list_item, null, true);holder.textView = (TextView) convertView.findViewById(R.id.text);convertView.setTag(holder);} else {holder = (MyViewHolder) convertView.getTag();}holder.textView.setText(“hello”);return convertView;}class MyViewHolder {TextView textView;//這里是把水果放到籃子里的操作} }

簡單列表的復用
其中getView是渲染每個Item時進行回調生成View的,方法參數convertView就是ListView傳回可以復用的View,當其不為null時,無需重新創建View,可以直接使用convertView,進行數據渲染即可。其原理是當第一次調用時ListView直接將生成的View緩存到一個ArrayList中,當需要時直接從ArrayList中取出即可:

復雜列表復用
當列表中的item需要不同Item的時候

@Override//返回view類型數量public int getViewTypeCount() {return super.getViewTypeCount();}@Override//返回每個Item的類型public int getItemViewType(int position) {return super.getItemViewType(position);}

總結

以上是生活随笔為你收集整理的ListView 优化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。