Android中BaseAdapter的用法分析與理解
本文實(shí)例分析了Android中BaseAdapter的用法。分享給大家供大家參考,具體如下:
最近做一個(gè)項(xiàng)目,項(xiàng)目中用到了ListView,ListView最重要的就是綁定數(shù)據(jù),這個(gè)數(shù)據(jù)由Adapter來提供,這里我重寫了BaseAdapter這個(gè)類來實(shí)現(xiàn)自己的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;//自定義的一個(gè)類用來緩存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在開始繪制的時(shí)候,系統(tǒng)首先調(diào)用getCount()函數(shù),根據(jù)他的返回值得到 listView的長(zhǎng)度,然后根據(jù)這個(gè)長(zhǎng)度,調(diào)用getView()逐一繪制每一行。如果你的 getCount()返回值是0的話,列表將不顯示同樣return 1,就只顯示一行。系統(tǒng)顯示列表時(shí),首先實(shí)例化一個(gè)適配器(這里將實(shí)例化自定義的適配器)。當(dāng)手動(dòng)完成適配時(shí),必須手動(dòng)映射數(shù)據(jù),這需要重寫getView()方 法。系統(tǒng)在繪制列表的每一行的時(shí)候?qū)⒄{(diào)用此方法。getView()有三個(gè)參數(shù),position表示將顯示的是第幾行,covertView是從布局文 件中inflate來的布局。我們用LayoutInflater的方法將定義好的item.xml文件提取成View實(shí)例用來顯示。然后將xml文件中 的各個(gè)組件實(shí)例化(簡(jiǎn)單的findViewById()方法)。這樣便可以將數(shù)據(jù)對(duì)應(yīng)到各個(gè)組件上了。但是按鈕為了響應(yīng)點(diǎn)擊事件,需要為它添加點(diǎn)擊監(jiān)聽 器,這樣就能捕獲點(diǎn)擊事件。至此一個(gè)自定義的listView就完成了,現(xiàn)在讓我們回過頭從新審視這個(gè)過程。系統(tǒng)要繪制ListView了,他首先獲得要 繪制的這個(gè)列表的長(zhǎng)度,然后開始繪制第一行,怎么繪制呢?調(diào)用getView()函數(shù)。在這個(gè)函數(shù)里面首先獲得一個(gè)View(實(shí)際上是一個(gè) ViewGroup),然后再實(shí)例并設(shè)置各個(gè)組件,顯示之。好了,繪制完這一行了。那再繪制下一行,直到繪完為止。
更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android控件用法總結(jié)》、《Android視圖View技巧總結(jié)》、《Android操作SQLite數(shù)據(jù)庫(kù)技巧總結(jié)》、《Android操作json格式數(shù)據(jù)技巧總結(jié)》、《Android數(shù)據(jù)庫(kù)操作技巧總結(jié)》、《Android文件操作技巧匯總》、《Android編程開發(fā)之SD卡操作方法匯總》、《Android開發(fā)入門與進(jìn)階教程》及《Android資源操作技巧匯總》
希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。
- Android代碼實(shí)現(xiàn)AdapterViews和RecyclerView無限滾動(dòng)
- Android listview與adapter詳解及實(shí)例代碼
- Android自定義實(shí)現(xiàn)BaseAdapter的優(yōu)化布局
- Android自定義實(shí)現(xiàn)BaseAdapter的普通實(shí)現(xiàn)
- Android中BaseAdapter用法示例
- 舉例講解Android應(yīng)用中SimpleAdapter簡(jiǎn)單適配器的使用
- 詳解Android App中ViewPager使用PagerAdapter的方法
- Python設(shè)計(jì)模式編程中Adapter適配器模式的使用實(shí)例
- C#使用SqlDataAdapter對(duì)象獲取數(shù)據(jù)的方法
- RecyclerView Adapter輔助類詳解及示例代碼
相關(guān)文章
Android創(chuàng)建與解析XML(二)——詳解Dom方式
本篇文章主要介紹了Android創(chuàng)建與解析XML(二)——詳解Dom方式 ,這里整理了詳細(xì)的代碼,有需要的小伙伴可以參考下。2016-11-11
Android仿微信朋友圈實(shí)現(xiàn)滾動(dòng)條下拉反彈效果
這篇文章主要為大家介紹了Android仿微信朋友圈實(shí)現(xiàn)滾動(dòng)條下拉反彈效果,感興趣的小伙伴們可以參考一下2016-01-01
Android6.0 固定屏幕功能實(shí)現(xiàn)方法及實(shí)例
這篇文章主要介紹了Android6.0 固定屏幕功能實(shí)現(xiàn)方法及實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-01-01
Android RecyclerView加載不同布局簡(jiǎn)單實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了Android RecyclerView加載不同布局簡(jiǎn)單實(shí)現(xiàn),感興趣的小伙伴們可以參考一下2016-08-08
mac開發(fā)android環(huán)境搭建步驟圖解
這里比較詳細(xì)的來總結(jié)下mac開發(fā)android的環(huán)境搭建步驟安裝過程,希望對(duì)一些正準(zhǔn)備配置Android開發(fā)環(huán)境的小伙伴們有一定幫助2014-01-01
Android模擬器安裝APP出現(xiàn)INSTALL_FAILED_NO_MATCHING_ABIS錯(cuò)誤解決方案
這篇文章主要介紹了 Android模擬器安裝APP出現(xiàn)INSTALL_FAILED_NO_MATCHING_ABIS錯(cuò)誤解決方案的相關(guān)資料,需要的朋友可以參考下2016-12-12
Android音樂播放器制作 掃描本地音樂顯示在手機(jī)(一)
這篇文章主要介紹了Android音樂播放器的制作方法,掃描本地音樂顯示在手機(jī)上,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02

