-
context要使用當前的Adapter的界面對象 mInflater:布局裝載器對象查看全部
-
BaseAdapter基本結(jié)構(gòu) — public int getCount():適配器中數(shù)據(jù)集中數(shù)據(jù)的個數(shù) — public Object getItem(int position):獲取數(shù)據(jù)集中與指定索引對應(yīng)的數(shù)據(jù)項 — public long getItemId(in position):獲取指定行對應(yīng)的ID — public View getView(int position,View convertView,ViewGroup parent):獲取每一個Item的顯示內(nèi)容。 ------------------------------------------ 如圖,新建 Item.xml,創(chuàng)建一個簡單的 Item 布局。查看全部
-
ListView的顯示與緩存機制 了解緩沖池的存在 如圖,實際有很多數(shù)據(jù),但局限于手機屏幕的尺寸,ListView第一次加載的時候只顯示前面幾條數(shù)據(jù),當我們向上滑動的時候,Item1 就被回收到緩沖池, 同時Item8從緩沖池中被取出。 從緩沖池中取出對象的方法:View getView(int position, View convertView, ViewGroup parent)。 通過緩存機制,可以極大地節(jié)約系統(tǒng)資源。查看全部
-
數(shù)據(jù)適配器——BaseAdapter 數(shù)據(jù)源的來源是各種各樣的,而ListView所展現(xiàn)的數(shù)據(jù)格式是有一定要求的,數(shù)據(jù)適配器將數(shù)據(jù)源轉(zhuǎn)換成ListView可以顯示的數(shù)據(jù)格式,建立了數(shù)據(jù)源和ListView的適配關(guān)系。從而將數(shù)據(jù)的來源和數(shù)據(jù)的顯示進行了“解耦”,降低了程序的耦合性,讓程序更加容易擴展。 適配器有很多種,而BaseAdapter是最通用的適配器。查看全部
-
通用的高效適配器的打造 按照截圖的思路,我們可以將自定義的適配器封裝起來,方便以后調(diào)用,去解決其他的項目問題,也就是代碼復(fù)用。只需要修改ViewHolder的成員變量(也就是Item的控件)、修改對ViewHolder成員的賦值(ItemBean的成員變量的getter方法)就可以了,非常方便。查看全部
-
對于一些細微的程序比較效率用獲取系統(tǒng)納秒時間方法 關(guān)鍵代碼: long start =System.nanoTime();程序開始前計時 ... long end =System.nanoTime();結(jié)束計時 long dValue=end-start;計算查值 mSumTime +=dValue統(tǒng)計時間 log.d("xys",String.valueof(mSunTime));打印出時間 viewholder 作為findviewbyid的一個轉(zhuǎn)接,避免系統(tǒng)大量的遍歷提高效率。查看全部
-
1.創(chuàng)建ViewHolder類,含有所需的各種控件,為了避免重復(fù)的findViewById() class ViewHolder{ public ImageView tv_image; public TextView tv_title; public TextView tv_content; } 2.判斷convertView是否為空 空:用setTag()方法將ViewHolder與其綁定 非空:用getTag()方法,取出相關(guān)的ViewHolder 重點: (1)convertView為空的時候,通過setTag()將ViewHolder與convertView綁定,每一個空的convertView都將會把Item的三個控件保存到ViewHolder里面。之后通過getTag()方法可以快速找到一個convertView所對應(yīng)的ViewHolder對象,然后通過ViewHolder的成員變量找到了對應(yīng)的三個控件,從而避免了用findViewById()去實例化對象。 (2)convertView不為空的時候,使用getTag()方法,取出它所關(guān)聯(lián)的ViewHolder對象,同時也找到l對應(yīng)控件。 3.之后再創(chuàng)建 ItemBean 對象,為viewHolder的三個控件賦值: ItemBean bean = mylist.get(position); viewHolder.imageView.setImageResource(bean.getItemImageid()); viewHolder.title.setText(bean.getItemTitle()); viewHolder.content.setText(bean.getItemContent()); 4.return convertView查看全部
-
普通式與逗比式的不同在于convertView的使用上: 普通式對convertView進行了處理,充分利用了ListView的緩存機制,避免了重復(fù)創(chuàng)建View對象,因為通過LayoutInflater對象的inflate()方法創(chuàng)建View對象是非常耗時且耗資源的。 通過簡單的判斷: if (convertView == null){ convertView = myInflater.inflate(R.layout.item, null); } ,就可以避免大量創(chuàng)建View對象,從而對 getView()做了較好的優(yōu)化。 ----------------------------------- 摘自評論區(qū): 如果將findViewById寫在if(convertView==null)中的話,運行后listview的順序是混亂的。 普通式,要慎用。 系統(tǒng)每次調(diào)用 findViewById()的時候都會遍歷一次視圖樹,當視圖樹很復(fù)雜的時候就會消耗大量的時間。查看全部
-
“逗比式”:只使用了getView()的position參數(shù),完全沒有利用另外兩個參數(shù)。本質(zhì)上說,是“沒有利用到ListView的緩存機制”。每次使用getView(),都通過 LayoutInflater 創(chuàng)建新的View對象view,并在view中找到相應(yīng)的控件、去給它設(shè)置相應(yīng)的值,完全沒有利用到 ListView 的緩存機制,這樣是對資源的極大浪費,不建議使用。查看全部
-
創(chuàng)建一個新的類 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; } 改寫四個繼承的方法。 getCount():返回ListView需要顯示的數(shù)據(jù)數(shù)量。 getItem():取出索引所對應(yīng)的一個數(shù)據(jù)項。 getItemId( ):取出數(shù)據(jù)項所對應(yīng)的索引。 getView():返回每一項的顯示內(nèi)容。查看全部
-
ItemBean的使用: 我們通常創(chuàng)建一個Bean對象來表示listView中一行顯示的數(shù)據(jù)。 創(chuàng)建List<ItemBean> itemBeanList=new ArrayList<>(); 通過for循環(huán)來添加數(shù)組內(nèi)容,如圖所示 在這之前,我們要先創(chuàng)建一個類來封裝要顯示的三個數(shù)組itembean類 public class ItemBean { //私有屬性 private int ItemImageid; private String ItemTitle; private String ItemContent; //無參構(gòu)造方法 public ItemBean() { } //非原則,為了方便后面創(chuàng)建對象,這里又定義了有參的構(gòu)造方法。 public ItemBean(int itemImageid, String itemTitle, String itemContent) { ItemImageid = itemImageid; ItemTitle = itemTitle; ItemContent = itemContent; }查看全部
-
BaseAdapter基本結(jié)構(gòu) public int getCount():適配器中數(shù)據(jù)集中數(shù)據(jù)的個數(shù) public Object getItem(int position):獲取數(shù)據(jù)集中與指定索引對應(yīng)的數(shù)據(jù)項 public long getItemId(int position):獲取指定行對應(yīng)的ID public View getView(int position,View convertView,ViewGroup parent):獲取每一個Item的顯示內(nèi)容 如圖創(chuàng)建一個見得item布局來讓listview加載查看全部
-
ListView的顯示與緩存機制 了解緩沖池的存在 如圖,實際有很多數(shù)據(jù),但局限于手機屏幕的尺寸,ListView第一次加載的時候只顯示前面幾條數(shù)據(jù),當我們向上滑動的時候,Item1 就被回收到緩沖池, 同時Item8從緩沖池中被取出。 從緩沖池中取出對象的方法:View getView(int position, View convertView, ViewGroup parent)。 通過緩存機制,可以極大地節(jié)約系統(tǒng)資源。查看全部
-
數(shù)據(jù)適配器——BaseAdapter 數(shù)據(jù)源的來源是各種各樣的,而ListView所展現(xiàn)的數(shù)據(jù)格式是有一定要求的,數(shù)據(jù)適配器將數(shù)據(jù)源轉(zhuǎn)換成ListView可以顯示的數(shù)據(jù)格式,建立了數(shù)據(jù)源和ListView的適配關(guān)系。從而將數(shù)據(jù)的來源和數(shù)據(jù)的顯示進行了“解耦”,降低了程序的耦合性,讓程序更加容易擴展。 適配器有很多種,而BaseAdapter是最通用的適配器。查看全部
-
viewHolder 文藝式查看全部
舉報
0/150
提交
取消