自定義GridView/ListView數據源 – Android移動開發技術文章_手機開發 Android移動開發教學課程

在開發中,我們常常會遇到比較復雜的GridView/ListView的佈局,重新實現BaseAdapter不但能幫助我們實現我們想要的佈局效果,並且在綁定大數據量時也不會感覺有卡殼現象。記得以前用一個ListView直接去綁定手機內的聯系人Cursor(一百多號人),滑動的時候就會有卡的感覺。今天決定寫個Demo是因為在項目中可能會要實現這樣的一個效果:一個GridView中綁定4個ImageButton,有些按鈕在特定的情況下是不可用的,也就是Enable=false;並且不同的按鈕要擁有各自不同的點擊事件。





實現第一點好辦,添加一個標志位boolean bl來控制按鈕的Enable狀態,實現第二點就是將View.onClickListener添加到List列表中


1、MyAdapter.java繼承自BaseAdapter


public class MyAdapter extends BaseAdapter{

private Context context;
private List<Map<String,Object>> list;
private LayoutInflater mInflater;
public MyAdapter(Context context,List<Map<String,Object>> list){
this.context=context;
this.list=list;
mInflater=LayoutInflater.from(this.context);
}
public int getCount() {
// TODO Auto-generated method stub
if(list!=null)
return list.size();
else
return 0;
}

public Object getItem(int position) {
// TODO Auto-generated method stub
if(list!=null)
return list.get(position);
else
return null;
}

public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}

@SuppressWarnings(“unused”)
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder=null;
if(holder==null){
holder=new ViewHolder();
convertView=mInflater.inflate(R.layout.gridview_item, null);
holder.ib=(ImageButton)convertView.findViewById(R.id.ib);
convertView.setTag(holder);
}else{
holder=(ViewHolder)convertView.getTag();
}
//綁定點擊事件
holder.ib.setOnClickListener((OnClickListener) list.get(position).get(“listen”));
//通過標志位控制按鈕的Enable
if(Boolean.parseBoolean(list.get(position).get(“bl”).toString()))
holder.ib.setEnabled(true);
else
h

You May Also Like