成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

ListView有多種Item View的優(yōu)化

移動(dòng)開發(fā) Android
對于ListView 的優(yōu)化,網(wǎng)上已經(jīng)被講解過很多,ListView的優(yōu)化一般優(yōu)化如下幾點(diǎn): (1)Item View重用優(yōu)化(防內(nèi)存溢出)(2)View查找優(yōu)化(減少執(zhí)行時(shí)間)(3)滑動(dòng)優(yōu)化,在滑動(dòng)的時(shí)候加載圖片數(shù)據(jù)等(防滑動(dòng)卡頓),以上基本上是對應(yīng)單ItemView進(jìn)行的優(yōu)化,對于多種ItemView的優(yōu)化一般使用BaseAdapter給 提供的兩個(gè)方法

對于ListView 的優(yōu)化,網(wǎng)上已經(jīng)被講解過很多,ListView的優(yōu)化一般優(yōu)化如下幾點(diǎn):

  (1)Item View重用優(yōu)化(防內(nèi)存溢出)

  (2)View查找優(yōu)化(減少執(zhí)行時(shí)間)

  (3)滑動(dòng)優(yōu)化,在滑動(dòng)的時(shí)候加載圖片數(shù)據(jù)等(防滑動(dòng)卡頓)

以上基本上是對應(yīng)單ItemView進(jìn)行的優(yōu)化,對于多種ItemView的優(yōu)化一般使用BaseAdapter給

提供的兩個(gè)方法

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

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

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

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

(1)getItemViewType()返回值必須大于等于0,并且小于類型的個(gè)數(shù)。為什么是這個(gè)范圍,是因?yàn)?/p>

     在ListView里有一個(gè)數(shù)據(jù),用來緩存已經(jīng)使用過的Item View,詳細(xì)信息自己看源碼

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

     去創(chuàng)建緩存數(shù)組

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

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

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

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

改動(dòng)都會(huì)耽誤很長時(shí)間。新增類型也不好處理。

我針對遇到的問題進(jìn)行了一個(gè)點(diǎn)點(diǎn)的優(yōu)化,可以能不是***秀的,但是至少能解決以上問題,如果您能有更好的方式,也歡迎交流。

設(shè)計(jì):

使用提供者的設(shè)計(jì)方式提供每種Item View,不同的ItemView會(huì)有不同的提供者,提供者需要實(shí)現(xiàn)一個(gè)接口:

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

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

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

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

一般情況下,都要傳遞給Adapter一個(gè)Bean集合,我的設(shè)計(jì)是,讓這里面的bean都實(shí)現(xiàn)一個(gè)接口,用來標(biāo)示它對應(yīng)的哪個(gè)提供者。

使用方法:

  1. [mw_shl_code=java,true]private ListView mListView; 
  2.         private List<IItemBean> mList = new ArrayList<IItemBean>(); 
  3.         @Override 
  4.         protected void onCreate(Bundle savedInstanceState) { 
  5.                 super.onCreate(savedInstanceState); 
  6.                 setContentView(R.layout.activity_main); 
  7.                 createData(); 
  8.                 mListView = (ListView) findViewById(R.id.my_listview); 
  9.                 //不同之處在于多了一個(gè)provider集合,提供所有期望顯示類型的provider class 
  10.                 //getView的實(shí)現(xiàn)在provider中實(shí)現(xiàn),和在adapter中用法一樣 
  11.                 List<Class<? extends IViewProvider>> providers = new ArrayList<Class<? extends IViewProvider>>(); 
  12.                 providers.add(FlightOrderViewProvider.class); 
  13.                 providers.add(SticketOrderViewProvider.class); 
  14.                 
  15.                 MiltilViewListAdapter adpater = new MiltilViewListAdapter(getApplication(), mList, providers); 
  16.                 mListView.setAdapter(adpater); 
  17.         }[/mw_shl_code] 

 本文鏈接:http://www.eoeandroid.com/forum.php?mod=viewthread&tid=329890&extra=page%3D2%26filter%3Ddateline%26orderby%3Dlastpost%26dateline%3D604800&page=1

責(zé)任編輯:chenqingxiang 來源: eoeandroid
相關(guān)推薦

2015-10-22 10:59:13

ListViewItem刷新

2013-03-27 09:17:17

Android開發(fā)AndroidList

2014-12-17 09:46:30

AndroidListView最佳實(shí)踐

2013-08-07 10:47:58

Android特效ListView

2012-12-26 15:19:09

Android開發(fā)ListView

2013-08-07 10:35:02

AndroidListView拖拽

2012-12-26 12:22:25

Android開發(fā)ListView布局

2014-07-15 17:17:31

AdapterAndroid

2013-09-17 14:00:19

AndroidListView原理

2014-09-17 11:20:38

AndroidListView技巧

2009-09-08 14:43:41

C# listbox

2012-11-14 11:07:24

網(wǎng)絡(luò)優(yōu)化

2010-06-03 09:39:24

優(yōu)化MySQL性能

2010-06-13 15:42:37

MySQL性能優(yōu)化

2016-04-12 10:07:55

AndroidViewList

2022-01-19 16:13:20

戴爾

2013-04-02 13:04:07

ListView平滑滾

2010-04-01 09:11:05

Oracle函數(shù)

2015-02-12 14:09:20

ListViewAndroid

2011-05-27 15:02:15

Android ListView
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 久久亚洲欧美日韩精品专区 | 成人二区| 手机av在线 | 成人一区二区在线 | 一区二区三区四区在线播放 | 狠狠干狠狠操 | 欧美综合网 | 久久久精品一区二区 | 欧美亚洲高清 | 色久在线 | 女生羞羞网站 | 91不卡 | 日韩精品一区二区三区高清免费 | 涩涩视频网站在线观看 | 精品视频一区二区三区 | 中文字幕免费观看 | 国产精品99久| 91久久精品国产免费一区 | 伊人中文网| 一区二区三区国产 | 日韩精品一区二区三区中文在线 | 九九爱这里只有精品 | 成人性视频免费网站 | 午夜精品久久久 | 天堂色| www.国产.com| 婷婷色综合| 精品视频 免费 | 久久精品二区亚洲w码 | 999久久久 | 久久国产欧美日韩精品 | 日韩欧美中文在线 | 91av在线视频观看 | 亚洲一区二区在线播放 | 男女网站免费观看 | 草久在线视频 | 色婷婷综合久久久久中文一区二区 | 国产亚洲高清视频 | 亚洲精品久久久久久下一站 | 久久精品黄色 | 自拍偷拍亚洲视频 |