編輯:關於Android編程
本文實例分析了Android中BaseAdapter的用法。分享給大家供大家參考,具體如下:
最近做一個項目,項目中用到了ListView,ListView最重要的就是綁定數據,這個數據由Adapter來提供,這裡我重寫了BaseAdapter這個類來實現自己的menuAdapter代碼如下:
package org.leepood.lanorder; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.leepood.xmlparse.xmlParse; import android.view.LayoutInflater; import android.content.Context; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; public class menuAdapter extends BaseAdapter { private LayoutInflatermInflater; private Context context; privateList<Menu> menus; publicmenuAdapter(List<Menu> menus,Context context) { this.menus=menus; this.mInflater =LayoutInflater.from(context); } public int getCount() { return menus.size(); } public Object getItem(intposition) { return menus.get(position); } public long getItemId(intposition) { return position; } public View getView(intposition, View convertView, ViewGroup parent) { menuAdapterViewholder = null;//自定義的一個類用來緩存convertview if (convertView ==null) { holder=newmenuAdapterView(); convertView =mInflater.inflate(R.layout.menu, null); holder.name =(TextView)convertView.findViewById(R.id.txtname); holder.price =(TextView)convertView.findViewById(R.id.txtprice); holder.description =(TextView)convertView.findViewById(R.id.txtdescription); convertView.setTag(holder); //Log.i("tag", "run once"); }else { holder = (menuAdapterView)convertView.getTag(); } holder.name.setText(String.valueOf(position)); holder.price.setText((String)menus.get(position).getPrice()); holder.description.setText((String)menus.get(position).getDescription()); return convertView; } }
其中BaseAdapter需要重寫的方法:
getCount(),getItem(int position),getItemId(int position),getView(int position, View convertView, ViewGroup parent)
流程分析:
listView在開始繪制的時候,系統首先調用getCount()函數,根據他的返回值得到 listView的長度,然後根據這個長度,調用getView()逐一繪制每一行。如果你的 getCount()返回值是0的話,列表將不顯示同樣return 1,就只顯示一行。系統顯示列表時,首先實例化一個適配器(這裡將實例化自定義的適配器)。當手動完成適配時,必須手動映射數據,這需要重寫getView()方 法。系統在繪制列表的每一行的時候將調用此方法。getView()有三個參數,position表示將顯示的是第幾行,covertView是從布局文 件中inflate來的布局。我們用LayoutInflater的方法將定義好的item.xml文件提取成View實例用來顯示。然後將xml文件中 的各個組件實例化(簡單的findViewById()方法)。這樣便可以將數據對應到各個組件上了。但是按鈕為了響應點擊事件,需要為它添加點擊監聽 器,這樣就能捕獲點擊事件。至此一個自定義的listView就完成了,現在讓我們回過頭從新審視這個過程。系統要繪制ListView了,他首先獲得要 繪制的這個列表的長度,然後開始繪制第一行,怎麼繪制呢?調用getView()函數。在這個函數裡面首先獲得一個View(實際上是一個 ViewGroup),然後再實例並設置各個組件,顯示之。好了,繪制完這一行了。那再繪制下一行,直到繪完為止。
更多關於Android相關內容感興趣的讀者可查看本站專題:《Android控件用法總結》、《Android視圖View技巧總結》、《Android操作SQLite數據庫技巧總結》、《Android操作json格式數據技巧總結》、《Android數據庫操作技巧總結》、《Android文件操作技巧匯總》、《Android編程開發之SD卡操作方法匯總》、《Android開發入門與進階教程》及《Android資源操作技巧匯總》
希望本文所述對大家Android程序設計有所幫助。
關於下拉刷新的實現原理我在上篇文章Android自定義控件之仿美團下拉刷新中已經詳細介紹過了,這篇文章主要介紹表盤的動畫實現原理汽車之家的下拉刷新分為三個狀態:第一個狀態
1、添加android support包因為上面的幾個類都是在android support包中才提供,我們先添加包。在Eclipse->Window->An
smalidea smalidea是一個IntelliJ IDEA/Android Studio smali語言插件,可實現動態調試smali代碼。 github地址
緒論最近一直比較忙,也沒抽出時間來寫博客,也不得不說是自己犯了懶癌,人要是一懶就什麼事都不想做了,如果不能堅持下來的話,那麼估計就廢了,��。