91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ListView中Item View的優化方法有哪些

發布時間:2021-12-21 10:10:12 來源:億速云 閱讀:119 作者:iii 欄目:移動開發

這篇文章主要介紹“ListView中Item View的優化方法有哪些”,在日常操作中,相信很多人在ListView中Item View的優化方法有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”ListView中Item View的優化方法有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

對于ListView 的優化,網上已經被講解過很多,ListView的優化一般優化如下幾點:

(1)Item View重用優化(防內存溢出)

(2)View查找優化(減少執行時間)

(3)滑動優化,在滑動的時候加載圖片數據等(防滑動卡頓)

以上基本上是對應單ItemView進行的優化,對于多種ItemView的優化一般使用BaseAdapter給

提供的兩個方法

getItemViewType():返回View類型,默認返回0

getViewTypeCount(): 返回有多少種類型的itemView,默認返回1

只有一種類型item view的話,是不需要重寫這兩個方法的。

如果有多個的時候,就需要重寫這個方法了,并且返回的必須滿足一下要求:

(1)getItemViewType()返回值必須大于等于0,并且小于類型的個數。為什么是這個范圍,是因為

   在ListView里有一個數據,用來緩存已經使用過的Item View,詳細信息自己看源碼

(2)getViewTypeCount()這個方法的返回值就是你可能遇到的Item view類型的***個數,ListView會根據這個返回值

   去創建緩存數組

如果有兩種View類型的話,直接在Adapter里面重寫getView()方法就可以了,根據getItemViewType()返回值創建相應的View既可。

但是,如果有六個,七個怎么辦?那么Adapter的getView()方法得寫多少代碼,到時候維護起來會多么麻煩,自己看自己寫的還好,

如果換做別人呢?非常非常的痛苦.....

我在做我們的app的時候,就遇到了這樣的問題,訂單列表,每種訂單所對應的Item View會有很大的區別,操作起來極為不方便,如有小的

改動都會耽誤很長時間。新增類型也不好處理。

我針對遇到的問題進行了一個點點的優化,可以能不是***秀的,但是至少能解決以上問題,如果您能有更好的方式,也歡迎交流。

設計:

使用提供者的設計方式提供每種Item View,不同的ItemView會有不同的提供者,提供者需要實現一個接口:

public interface IViewProvider {     public abstract View getItemView(View convertView, LayoutInflater inflater, Object data); }

提供者只需要實現此接口,然后實現getItemView()方法,實現方式和Adapter的getView()的方式完全一樣,減少了學習成本。

我還繼承BaseAdapter專門實現了一個Adapter,名字叫MiltilViewListAdapter.java,實現了前面說的兩個方法,和getView()方法

提供者只需要配置給MiltilViewListAdapter的實例即可。

一般情況下,都要傳遞給Adapter一個Bean集合,我的設計是,讓這里面的bean都實現一個接口,用來標示它對應的哪個提供者。

使用方法:

[mw_shl_code=java,true]private ListView mListView;         private List<IItemBean> mList = new ArrayList<IItemBean>();         @Override         protected void onCreate(Bundle savedInstanceState) {                 super.onCreate(savedInstanceState);                 setContentView(R.layout.activity_main);                 createData();                 mListView = (ListView) findViewById(R.id.my_listview);                 //不同之處在于多了一個provider集合,提供所有期望顯示類型的provider class                 //getView的實現在provider中實現,和在adapter中用法一樣                 List<Class<? extends IViewProvider>> providers = new ArrayList<Class<? extends IViewProvider>>();                 providers.add(FlightOrderViewProvider.class);                 providers.add(SticketOrderViewProvider.class);                                 MiltilViewListAdapter adpater = new MiltilViewListAdapter(getApplication(), mList, providers);                 mListView.setAdapter(adpater);         }[/mw_shl_code]

到此,關于“ListView中Item View的優化方法有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

沭阳县| 广德县| 宜昌市| 卢湾区| 得荣县| 常宁市| 呈贡县| 塔河县| 噶尔县| 余江县| 精河县| 白河县| 镇赉县| 东兴市| 吴堡县| 偏关县| 德阳市| 汉阴县| 平安县| 松桃| 平泉县| 济阳县| 屯昌县| 吐鲁番市| 布尔津县| 隆德县| 高平市| 涞源县| 搜索| 绿春县| 卢氏县| 哈尔滨市| 宜兰市| 溆浦县| 宁晋县| 延川县| 新田县| 温泉县| 绥芬河市| 乐昌市| 班戈县|