-
ViewHolder優化BaseAdapter思路查看全部
-
BaseAdapter基本結構 public int getCount();//適配器中數據集中數據的個數 public Object getItem(int position);//獲取數據集中與指定索引對應的數據項 public long getItemId(int position);//獲取指定行對應的ID public View getView(int position,View convertView,ViewGroup parent);//獲取每一個Item顯示內容查看全部
-
計算總時間查看全部
-
記錄結束的時間查看全部
-
測試程序:計算程序運行的時間查看全部
-
viewholder 作為findviewbyid的一個轉接,避免系統大量的遍歷提高效率。查看全部
-
文藝式的好處查看全部
-
文藝式寫法查看全部
-
創建內部類viewHolder查看全部
-
適配器是繼承自BaseAdapter 1. 逗比式適配器 在逗比式getView()方法中,每次都會重新創建一個新的View。然后從這個View實例中找到對應的組件進行填充數據。 2. 普通式適配器 在普通式getView()方法中,先去判斷當前的View是否已經緩存過,沒有緩存過才去創建。 if(convertView == null) { convertView = mInflater.inflate(R.layout.item, null); } 普通式和逗比式的區別在于判斷當前View實例是否被緩存過,這樣就利用了ListView的緩存機制,避免了重新創建了當前View對象。因為通過inflate()轉換xml到一個view的過程需要一定的時間。 3. 文藝式適配器 文藝式getView()方法是利用了ViewHolder類,優化了inflate()和findViewById()的耗時操作。 (1)創建一個ViewHolder對象,通過ViewHolder對象,就將這些通過findViewById()找到的組件對象保存到了ViewHolder對應的組件對象中 (2)通過setTag()方法將這個viewHolder和當前的view建立聯系 //這樣就可以將沒有緩存過的View對象創建出來,并將其每個組件保存在ViewHolder對象中。 (3)當View不為空的時候就可以通過convertView.getTag()將它所關聯的viewHoloder對象取出。 (4)最后通過viewHolder中保存的組件對象設置當前的view對象 //通過ViewHolder類其實是優化了findViewById()的耗時操作查看全部
-
創建內部類ViewHolder,成員變量即ImageView imageView,TextView title,TextView content.避免重復的findViewById操作,若convertView為空則通過viewHolder的成員變量將findViewById到的控件保存起來,并將convertView.setTag(viewHolder),建立一個convertView和viewHolder之間的關聯關系;若convertView不為空,則可直接通過viewHolder=(ViewHolder)convertView.getTag;獲取viewHolder中保存的控件,用viewHolder的成員變量設置查看全部
-
BaseAdapter的三重境界之普通式查看全部
-
普通式相比于逗比式只是將每次循環中自己創建的view換成getView方法中參數的convertView,調用getView方法先判斷view是否為空,不為空表示已經加載過了存在于緩沖池中,不需要重新創建新的View類對象來轉換布局文件,布局文件轉換為View類對象也需要消耗不小的資源查看全部
-
使用“逗比”方式重寫BaseAdapter的嚴重缺點——沒有利用到ListView的緩存機制,每行都是新建一個View對象。查看全部
-
使用“逗比”方式重寫BaseAdapter的嚴重缺點——沒有利用到ListView的緩存機制,每行都是新建一個View對象。查看全部
舉報
0/150
提交
取消