熟女伦乱激情网一区二区,十八禁免费漫画在线观看,欲色欲香天天网综合久久,美女无遮挡隐私叼嗨网站

 對(duì)于ListView 的優(yōu)化,網(wǎng)上已經(jīng)被講解過(guò)很多,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)卡頓)
以上基本上是對(duì)應(yīng)單ItemView進(jìn)行的優(yōu)化,對(duì)于多種ItemView的優(yōu)化一般使用BaseAdapter給
提供的兩個(gè)方法

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

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

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

如果有多個(gè)的時(shí)候,就需要重寫(xiě)這個(gè)方法了,并且返回的必須滿足一下要求:
(1)getItemViewType()返回值必須大于等于0,并且小于類(lèi)型的個(gè)數(shù)。為什么是這個(gè)范圍,是因?yàn)?/font>
     在ListView里有一個(gè)數(shù)據(jù),用來(lái)緩存已經(jīng)使用過(guò)的Item View,詳細(xì)信息自己看源碼
(2)getViewTypeCount()這個(gè)方法的返回值就是你可能遇到的Item view類(lèi)型的最大個(gè)數(shù),ListView會(huì)根據(jù)這個(gè)返回值
     去創(chuàng)建緩存數(shù)組

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


但是,如果有六個(gè),七個(gè)怎么辦?那么Adapter的getView()方法得寫(xiě)多少代碼,到時(shí)候維護(hù)起來(lái)會(huì)多么麻煩,自己看自己寫(xiě)的還好,
如果換做別人呢?非常非常的痛苦.....

我在做我們的app的時(shí)候,就遇到了這樣的問(wèn)題,訂單列表,每種訂單所對(duì)應(yīng)的Item View會(huì)有很大的區(qū)別,操作起來(lái)極為不方便,如有小的
改動(dòng)都會(huì)耽誤很長(zhǎng)時(shí)間。新增類(lèi)型也不好處理。

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

設(shè)計(jì):

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

public interface IViewProvider {
    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專(zhuān)門(mén)實(shí)現(xiàn)了一個(gè)Adapter,名字叫MiltilViewListAdapter.java,實(shí)現(xiàn)了前面說(shuō)的兩個(gè)方法,和getView()方法

 

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

 

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

 

使用方法:

 

[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);
                //不同之處在于多了一個(gè)provider集合,提供所有期望顯示類(lèi)型的provider class
                //getView的實(shí)現(xiàn)在provider中實(shí)現(xiàn),和在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]

穩(wěn)定

產(chǎn)品高可用性高并發(fā)

貼心

項(xiàng)目群及時(shí)溝通

專(zhuān)業(yè)

產(chǎn)品經(jīng)理1v1支持

快速

MVP模式小步快跑

承諾

我們選擇聲譽(yù)

堅(jiān)持

10年專(zhuān)注高端品質(zhì)開(kāi)發(fā)
临泽县| 临夏县| 云浮市| 揭西县| 淅川县| 永州市| 定陶县| 赤壁市| 金溪县| 兴城市| 安塞县| 东光县| 湘乡市| 昌宁县| 即墨市| 平武县| 丹寨县| 太仆寺旗| 临武县| 庆城县| 台北市| 建湖县| 文水县| 丰台区| 潜山县| 铁岭市| 财经| 加查县| 荆州市| 宝鸡市| 鹰潭市| 安阳市| 盘山县| 武胜县| 阳春市| 阿巴嘎旗| 南靖县| 鹤庆县| 万安县| 塔城市| 阳春市|