-
普通式與逗比式的不同在于convertView的使用上: 普通式對(duì)convertView進(jìn)行了處理,充分利用了ListView的緩存機(jī)制,避免了重復(fù)創(chuàng)建View對(duì)象,因?yàn)橥ㄟ^(guò)LayoutInflater對(duì)象的inflate()方法創(chuàng)建View對(duì)象是非常耗時(shí)且耗資源的。 通過(guò)簡(jiǎn)單的判斷: if (convertView == null){ convertView = myInflater.inflate(R.layout.item, null); } ,就可以避免大量創(chuàng)建View對(duì)象,從而對(duì) getView()做了較好的優(yōu)化。 ----------------------------------- 摘自評(píng)論區(qū): 如果將findViewById寫(xiě)在if(convertView==null)中的話,運(yùn)行后listview的順序是混亂的。查看全部
-
逗比式,浪費(fèi)資源,請(qǐng)勿模仿!查看全部
-
為何是“逗比式”?因?yàn)檫@里只使用了getView()的position參數(shù),完全沒(méi)有利用另外兩個(gè)參數(shù)。本質(zhì)上說(shuō),是“沒(méi)有利用到ListView的緩存機(jī)制”。每次使用getView(),都通過(guò) LayoutInflater 創(chuàng)建新的View對(duì)象view,并在view中找到相應(yīng)的控件、去給它設(shè)置相應(yīng)的值,完全沒(méi)有利用到 ListView 的緩存機(jī)制,這樣是對(duì)資源的極大浪費(fèi)。查看全部
-
創(chuàng)建一個(gè)新的類(lèi) MyAdapter 繼承 BaseAdapter 作為自定義適配器。 聲明數(shù)據(jù)源 List<ItemBesn> mylist; 構(gòu)造有參的構(gòu)造方法,讓數(shù)據(jù)源和適配器產(chǎn)生關(guān)聯(lián): public MyAdapter(List<ItemBean> mylist) { this.mylist = mylist; } 改寫(xiě)四個(gè)繼承的方法。查看全部
-
AS快捷鍵:Alt+insert 在遵循JavaBean設(shè)計(jì)原則的前提下創(chuàng)建 ItemBean 類(lèi): public class ItemBean { //私有屬性 private int ItemImageid; private String ItemTitle; private String ItemContent; //無(wú)參構(gòu)造方法 public ItemBean() { } //非原則,為了方便后面創(chuàng)建對(duì)象,這里又定義了有參的構(gòu)造方法。 public ItemBean(int itemImageid, String itemTitle, String itemContent) { ItemImageid = itemImageid; ItemTitle = itemTitle; ItemContent = itemContent; } //公有的getter/setter方法 public void setItemImageid(int itemImageid) { ItemImageid = itemImageid; } public void setItemTitle(String itemTitle) { ItemTitle = itemTitle; } public void setItemContent(String itemContent) { ItemContent = itemContent; } public int getItemImageid() { return ItemImageid; } public String getItemTitle() { return ItemTitle; } public String getItemContent() { return ItemContent; } }查看全部
-
圖中直接使用有參的構(gòu)造方法實(shí)現(xiàn)賦值。還有另一種賦值方式,通過(guò) Bean 對(duì)象的setter方法: for(int i=0;i<20;i++){ ItemBean ib = new ItemBean(); ib.setItemImageid(R.mipmap.ic_launcher); ib.setItemTitle("我是標(biāo)題"+i); ib.setItemContent("我是內(nèi)容"+i); datalist.add(ib); }查看全部
-
BaseAdapter基本結(jié)構(gòu) public int getCount():適配器中數(shù)據(jù)集中數(shù)據(jù)的個(gè)數(shù) public Object getItem(int position):獲取數(shù)據(jù)集中與指定索引對(duì)應(yīng)的數(shù)據(jù)項(xiàng) public long getItemId(int position):獲取指定行對(duì)應(yīng)的ID public View getView(int position,View convertView,ViewGroup parent):獲取每一個(gè)Item的顯示內(nèi)容 ------------------------------------------ 如圖,新建 Item.xml,創(chuàng)建一個(gè)簡(jiǎn)單的 Item 布局。查看全部
-
ListView的顯示與緩存機(jī)制 了解緩沖池的存在 如圖,實(shí)際有很多數(shù)據(jù),但局限于手機(jī)屏幕的尺寸,ListView第一次加載的時(shí)候只顯示前面幾條數(shù)據(jù),當(dāng)我們向上滑動(dòng)的時(shí)候,Item1 就被回收到緩沖池, 同時(shí)Item8從緩沖池中被取出。 從緩沖池中取出對(duì)象的方法:View getView(int position, View convertView, ViewGroup parent)。 通過(guò)緩存機(jī)制,可以極大地節(jié)約系統(tǒng)資源。 ------------------------------- 摘自評(píng)論區(qū): 老師畫(huà)的圖是錯(cuò)誤的,從此圖中至少應(yīng)該一次加載8個(gè)item(但第八個(gè)還沒(méi)有顯示),然后開(kāi)始才是從Recycler中去取出被畫(huà)成的item。因?yàn)?item1還沒(méi)完全滑出屏幕時(shí),此時(shí)item8已經(jīng)顯示在界面上了,所以一次至少的加載8個(gè)item查看全部
-
數(shù)據(jù)適配器——BaseAdapter 數(shù)據(jù)源的來(lái)源是各種各樣的,而ListView所展現(xiàn)的數(shù)據(jù)格式是有一定要求的,數(shù)據(jù)適配器將數(shù)據(jù)源轉(zhuǎn)換成ListView可以顯示的數(shù)據(jù)格式,建立了數(shù)據(jù)源和ListView的適配關(guān)系。從而將數(shù)據(jù)的來(lái)源和數(shù)據(jù)的顯示進(jìn)行了“解耦”,降低了程序的耦合性,讓程序更加容易擴(kuò)展。 適配器有很多種,而B(niǎo)aseAdapter是最通用的適配器。查看全部
-
創(chuàng)建內(nèi)部類(lèi)ViewHolder用于優(yōu)化findView查看全部
-
取出三個(gè)數(shù)據(jù)查看全部
-
初始化對(duì)象查看全部
-
返回ListView要顯示的數(shù)據(jù)數(shù)量查看全部
-
數(shù)據(jù)源與數(shù)據(jù)適配器關(guān)聯(lián)查看全部
-
Alt+insert調(diào)出Constructor查看全部
舉報(bào)
0/150
提交
取消