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),然后再實例並設置各個組件,顯示之。好了,繪制完這一行了。那再繪制下一行,直到繪完為止。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM