派生自BaseAdapter的自定义适配器

 

关于:BaseAdapter

BaseAdapter是android应用程序中经常用到的基础数据适配器

它主要的用途是讲一组数据传到像ListView,Spinner,Gallery以及GridView等UI显示控件,它继承自类Adapter。

各类间关系图:

 

 

BaseAdapter实现了ListAdapter和SpinnerAdapter两个接口,所以它也可以直接给ListView和Spinner等UI组件直接提供数据。

BaseAapter是个抽象类,所以继承它需要实现某些方法,其中最重要的是getView函数

如下是需要覆写的函数:getCount(),getItem(),getItemId(),getView()

例子如下:

package gallery.gly;

 

import java.util.ArrayList;

import java.util.HashMap;

 

import android.app.AlertDialog;

import android.content.Context;

import android.view.LayoutInflater;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.Button;

import android.widget.ImageView;

import android.widget.TextView;

import android.widget.Toast;

 

public class MyAdapter extends BaseAdapter{

       //@private data

       private ArrayList<HashMap<String,Object>> data;

       private LayoutInflater layoutInflater;

       private Context context;

       //@constructor

       public MyAdapter(Context context,ArrayList<HashMap<String,Object>> data){

              this.context = context;

              this.data    = data;

              this.layoutInflater = LayoutInflater.from(context);

       }

       //@获取列数

       @Override

       public int getCount() {

              // TODO Auto-generated method stub

              return data.size();

       }

 

       //@获得某一位置数据

       @Override

       public Object getItem(int position) {

              // TODO Auto-generated method stub

              return data.get(position);

       }

 

       //@获得唯一的ID号

       @Override

       public long getItemId(int position) {

              // TODO Auto-generated method stub

              return position;

       }

 

       //@每绘制一列都将调用这个方法

       @Override

       public View getView(int position, View convertView, ViewGroup parent) {

              // TODO Auto-generated method stub

              ListviewComplent lvc = null;

              if(convertView==null){

                     lvc = new ListviewComplent();

                     //@获取组件布局

                     convertView = layoutInflater.inflate(R.layout.listlayout, null);

                     lvc.imageView = (ImageView)convertView.findViewById(R.id.image);

                     lvc.titleView = (TextView)convertView.findViewById(R.id.title);

                     lvc.button = (Button)convertView.findViewById(R.id.view_btn);

                     lvc.infoView  = (TextView)convertView.findViewById(R.id.info);

                    

                     convertView.setTag(lvc);

              }else{

                     lvc = (ListviewComplent)convertView.getTag();

              }

              //@绑定数据以及事件触发

              lvc.imageView.setBackgroundResource((Integer)data.get(position).get("image"));

              lvc.titleView.setText((String)data.get(position).get("title"));

              lvc.infoView.setText((String)data.get(position).get("info"));

              final int id = position;

              lvc.button.setOnClickListener(new OnClickListener(){

 

                     @Override

                     public void onClick(View v) {

                            // TODO Auto-generated method stub

                            new AlertDialog.Builder(v.getContext()).setTitle("列表框").setItems(

                                        new String[] { "Item1", "Item2" }, null).setNegativeButton(

                                        "确定", null).show();

                     }

                    

              });

              return convertView;

       }

}

效果图:

posted on 2011-12-27 20:44  爱紫兰  阅读(153)  评论(0)    收藏  举报