android自定义简单Adapter-实现每列按钮事件

下面是我在网上找的android自定义适配器的例子,我改了下,完成每列按钮事件!简单但记下


activity_main.xml/*主UIActivity*/
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   tools:context=".MainActivity" >
       <ListView
           android:id="@+id/listView"
           android:layout_width="fill_parent"
           android:layout_height="wrap_content"/>
</RelativeLayout>

list.xml /*列表Activity*/
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:orientation="horizontal" >
  <ImageView  
   android:id="@+id/image"  
   android:layout_width="wrap_content"  
   android:layout_height="wrap_content"  
   android:layout_margin="5px"/>  
 <LinearLayout  
   android:layout_width="wrap_content"  
   android:layout_height="wrap_content"  
   android:orientation="vertical">  
   <TextView  
       android:id="@+id/title"  
       android:layout_width="wrap_content"  
       android:layout_height="wrap_content"    
       android:textColor="#FFFFFFFF"  
       android:textSize="22px"/>  
   <TextView  
       android:id="@+id/info"  
       android:layout_width="wrap_content"  
       android:layout_height="wrap_content"    
       android:textColor="#FFFFFFFF"  
       android:textSize="13px"/>  
 </LinearLayout>    
 <Button  
   android:id="@+id/view_btn"  
   android:layout_width="wrap_content"  
   android:layout_height="wrap_content"  
   android:text="click me"  
   android:gravity="center" />  
</LinearLayout>

MainActivity.java
/*主Activity*/
public class MainActivity extends Activity {

   ListView listView;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       listView = (ListView)findViewById(R.id.listView);
       MyAdapter adapter = new MyAdapter(this,getData());
       listView.setAdapter(adapter);
   }
      /**
    * 构造hashMap集合
    */  
   private ArrayList<HashMap<String, Object>> getData(){  
       ArrayList<HashMap<String, Object>> arrayList = new ArrayList<HashMap<String,Object>>();  
       for(int i=0;i<10;i++){  
           HashMap<String, Object> tempHashMap = new HashMap<String, Object>();  
           tempHashMap.put("image", R.drawable.ic_launcher);  
           tempHashMap.put("title", "标题"+i);  
           tempHashMap.put("info", "描述性信息");  
           arrayList.add(tempHashMap);  
       }  
       return arrayList;  
   }  
}

ZuJian.java
/**
* 每个列表里面的组件
*/
public final class ZuJian {
   public ImageView imageView;  
   public TextView titleView;  
   public TextView infoView;  
   public Button button;
}

自定义的Adapter
/**
* 自定义Adapter 实现按钮事件
* 主要学会LayoutInflater及理解列表按钮事件是一种绑定原理
*
*/
public class MyAdapter extends BaseAdapter {
   private ArrayList<HashMap<String, Object>> dataList;//外面构造进来的数据List
   private LayoutInflater inflater;//可以将Layout文件变为View
   private Context context;

   public MyAdapter(Context context, ArrayList<HashMap<String, Object>> dataList) {
       this.context = context;
       this.dataList = dataList;
       inflater = LayoutInflater.from(context);
   }

   @Override
   public int getCount() {//创建完对象后会立刻执行此方法
       return dataList.size();
   }

   @Override
   public Object getItem(int arg0) {
       return dataList.get(arg0);
   }


   @Override
   public long getItemId(int arg0) {
       return arg0;
   }

   /**
    * 在列表每列创建的时候调用此方法,可以在里面的主键里加事件了
    * convertView 每一列对象
    */
   @Override
   public View getView(int position, View convertView, ViewGroup arg2) {
       ZuJian zuJian = null;  
       if(convertView==null){  
           zuJian = new ZuJian();  
           // 获取组件布局  
           convertView = inflater.inflate(R.layout.list, null);  
           zuJian.imageView = (ImageView) convertView.findViewById(R.id.image);  
           zuJian.titleView = (TextView) convertView.findViewById(R.id.title);  
           zuJian.infoView = (TextView) convertView.findViewById(R.id.info);  
           zuJian.button = (Button) convertView.findViewById(R.id.view_btn);  
           // 这里要注意,是使用的tag来存储数据的。  
           convertView.setTag(zuJian);  
       }  
       else {  
           zuJian = (ZuJian) convertView.getTag();  
       }  
       final String title = (String)dataList.get(position).get("title");
       // 绑定数据、以及事件触发  
       zuJian.imageView.setBackgroundResource((Integer)
               dataList.get(position).get("image"));  
       zuJian.titleView.setText(title);  
       zuJian.infoView.setText((String)dataList.get(position).get("info"));
     //给button绑定事件  
       zuJian.button.setOnClickListener(new OnClickListener(){
           public void onClick(View v) {  
               showInfo(title);  
           }  
       });  

   /**
        * 给每个view绑定一个长按事件
        */
       convertView.setOnLongClickListener(new OnLongClickListener(){
           @Override
           public boolean onLongClick(View v) {
                new AlertDialog.Builder(context)    
                .setTitle("我的listview")    
               .setMessage(title)    
               .setPositiveButton("确定", new DialogInterface.OnClickListener() {    
               public void onClick(DialogInterface dialog, int which) {    
                    }}).show();
               return false;
           }
       });        return convertView;  

   }
   /**
    *当用户点击按钮时触发的事件,会弹出一个确认对话框
    *可具体根据业务而定
    */  
    public void showInfo(String title){    
                new AlertDialog.Builder(context)    
                .setTitle("我的listview")    
               .setMessage("介绍..."+title)    
               .setPositiveButton("确定", new DialogInterface.OnClickListener() {    
               public void onClick(DialogInterface dialog, int which) {    
                    }}).show(); } }

你可能感兴趣的:(android自定义简单Adapter-实现每列按钮事件)