亚洲乱码卡一卡二卡三永久-亚洲乱码一二三四区-亚洲乱码一区二区三区在线观看-亚洲伦理一区-成人在色线视频在线观看免费大全-成人在线91

 對于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]

穩定

產品高可用性高并發

貼心

項目群及時溝通

專業

產品經理1v1支持

快速

MVP模式小步快跑

承諾

我們選擇聲譽

堅持

10年專注高端品質開發
  • 返回頂部
主站蜘蛛池模板: 在线观看网址你懂的 | 成人片在线视频 | 国产精品日本欧美一区二区 | 日韩在线播放中文字幕 | 欧美影院一区二区三区 | 成年人国产视频 | 国内精品免费视频 | 日韩高清在线高清免费 | 成人黄色短视频 | 午夜18免费观看 | 七色永久性tv网站免费看 | 国产羞羞的视频在线观看免费 | 国产欧美在线观看不卡 | 欧美影院一区二区三区 | 国产二三区 | 一级黄色片在线看 | 日韩小视频在线播放 | 亚洲人成网站观看在线观看 | 免费国产a国产片高清不卡 免费国产a | 99久久丝袜腿交 | 中文天堂在线最新2022更新 | 91国语精品自产拍在线观看性色 | 韩国午夜tv免费影院 | 国产特黄特色一级特色大片 | 国产精品二区三区 | 日日噜噜噜噜人人爽亚洲精品 | 午夜视频在线观看国产 | 波多野结衣视频免费在线观看 | 午夜影院在线观看视频 | 婷婷在线综合 | 秋霞宅宅236理论片 秋霞在线高清观看伦理片 秋霞影视伦理手机在线观看 | 超级乱淫视频播放日韩 | 中文字幕一区二区三区精彩视频 | 国产日本在线 | 亚洲人成网站色7799在线播放 | 欧美成人手机视频免费播放 | 黄色成人免费观看 | 国产欧美日韩高清专区手机版 | 99在线视频网站 | 欧美日韩国产动漫 | np饥渴放荡总受高hbl皇帝攻 |