?重写SimpleAdapter的getView以实现按钮点击响应

SimpleAdapter是四个适配器里最重要的适配器,它不仅实现了数据的绑定,而且可以自定义控件。

在自定义控件时,如果使用了按钮、复选框、单选框等需要点击监听器的控件,就得重写SimpleAdapter的getView函数来实现。

getView是用来刷新ListView的函数,每次在ListView里新增(新显示)一条记录时,getView就会被调用一次(在这次调用里,getView里就会对这条记录里的按钮设置监听器)。

下面是示例:

这是重写的类:MySimpleAdapter,里面的context变量是为了调用Toast类的makeText函数。

package com.plan;

import java.util.List;
import java.util.Map;

import android.content.Context;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.SimpleAdapter;
import android.widget.Toast;

import com.example.plan.R;

public class MySimpleAdapter extends SimpleAdapter{

    Context context;

    public MySimpleAdapter(Context context, List<? extends Map<String, ?>> data,
     int resource, String[] from, int[] to) {
        super(context, data, resource, from, to);
        this.context = context;
        // TODO Auto-generated constructor stub
    }

     public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            View v = super.getView(position, convertView, parent);

            Button btn=(Button) v.findViewById(R.id.button1);
            final int p = position;
            Log.d("Position", Integer.toString(position));
            btn.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                   // TODO Auto-generated method stub
                   Toast.makeText(context, "删除"+Integer.toString(p),2000).show();
                }
          });
          return v;
        }

}

使用上述类的代码:

plan_list = (ListView)findViewById(R.id.listView_today_plan);//找到控件
        ListAdapter adapter = null;//绑定适配器
        String[] time={"11:09","11:09","11:09"};
,"HelloWorld"};
        boolean[] check = {true,false,false};
        List<Map<String,Object>> listItems =
                new ArrayList<Map<String,Object>>();
        for(int i = 0; i < time.length;i++){
            Map<String,Object> map = new HashMap<String,Object>();
            map.put("time", time[i]);
            map.put("item", item[i]);
            map.put("check", check[i]);
            listItems.add(map);
        }

        adapter = new MySimpleAdapter(this,listItems,
                R.layout.plan_item,
                new String[]{"time","item","check"},
                new int[]{R.id.textView_time,R.id.textView_item,R.id.checkBox_complish});

        plan_list.setAdapter(adapter);

时间: 2024-11-14 12:38:09

?重写SimpleAdapter的getView以实现按钮点击响应的相关文章

ListView item中按钮点击实现删除

ListView item中按钮点击实现删除 在处理ListView 中item的按钮点击事件首先需要在item的根布局中添加 android:descendantFocusability="blocksDescendants"属性,否则item的点击事件会把其中image button的点击事件屏蔽掉 item的布局 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

Runtime应用防止按钮连续点击 (转)

好久之前就看到过使用Runtime解决按钮的连续点击的问题,一直觉得没啥好记录的.刚好今天旁边同时碰到这个问题,看他们好捉急而且好像很难处理,于是我先自己看看… 前面自己也学习了很多Runtime的东西,一直觉得这个按钮连续点击其实很简单,就使用Runtime交换SEL实现IMP即可,但其实没明白解决这个问题的过程. 虽然直接可以在github搜到解决方法,但是还是有必要学习一下解决这个问题的一步一步的思路,给出这个作者的git: 1 https://github.com/strivever/U

robotium脚本封装为APK,实现脱离手机数据线,使用按钮点击控制用例运行的小功能

最近一直在完成一些robotium的小功能,用来更方便的完成一些小功能的测试,或者可以说用来娱乐吧,幸得群内大神思路指点,就此引申,终于把这个功能得以实现 ---------------将robotium脚本封装为APK,使用按钮控制用例运行覆盖程度,测试结果以简单的xml文件输入到手机SD卡目录下---------------------- 废话不多说,转正题: 一.首先明确一点,这篇文章,是在你所编写的robotium脚本运行无异常的前提下实施 二.阐明思路: 1.我们需要一个运行良好的,逻

【IOS】iOS 如何放大按钮点击热区

Apple的iOS人机交互设计指南中指出,按钮点击热区应不小于44x44pt,否则这个按钮就会让用户觉得"很难用",因为明明点击上去了,却没有任何响应. 但我们有时做自定义Button的时候,设计图上的给出按钮尺寸明显要小于这个数.例如我之前做过的自定义Slider上的Thumb只有12x12pt,做出来后我发现自己根本点不到按钮-- 这个问题在WWDC 2012 Session 216视频中提到了一种解决方式.它重写了按钮中的pointInside方法,使得按钮热区不够44×44大小

Android实现Button按钮点击事件监听的几种方式

工作中的项目通常有多个人一起开发,而每个人都有每个人的代码风格,不注重代码规范通常是前人挖坑,后人采坑,降低项目开发效率及加大维护难度,这里分享几种安卓按钮点击事件监听的实现方式. 方式一:直接在Activity中实现View.OnClickListener接口,重写onClick方法,提供所有按钮监听事件入口.这是实际项目中最常用的方式,尤其在页面有多个按钮的情况下比较适用. package com.example.myapp; import android.app.Activity;impo

iOS-扩大按钮点击范围

更新记录 2020年3月28日,初稿 文章背景 近日,接到头头突然让我改一个东西,让我马上把某个按钮的点击相应区域扩大一点.作为一个iOS三个月的新人,还真不了解要怎么做.随后,头头说只要加一行代码就行了,然后让某位前辈直接把参考代码发给我. 后来,我加了一行类似于如下的代码: [button setHitTestEdgeInsets:UIEdgeInsetsMake(-10, -10, -10, -10)]; 就使得按钮点击区域扩大了.但是,我不明白其中的原理.于是乎,想要一探究竟. 探索过程

Android实现按钮点击效果(第一次点击变色,第二次恢复)

1.首先创建一个按钮 <Button android:id="@+id/click" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="点击变色" android:background="@drawable/btn_st" android:gravity="center&

【转】Android开发20——单个监听器监听多个按钮点击事件

原文网址:http://woshixy.blog.51cto.com/5637578/1093936 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://woshixy.blog.51cto.com/5637578/1093936 一.单个按钮点击事件的监听 方法一 /** * 从网络上获取图片 * * @author 徐越 * */ public class MainActivity extends Activity { pri

设置警告框样式为带有两个文本输入的警告框,用于收集用户收货地址和联系电话。并选择合适的代理方法,当警告框上的两输入框有一个为空时限制“购买”按钮点击。

收集购物信息  iOS项目 倒计时:588 步骤 /.panel-heading 项目需求 设置警告框样式为带有两个文本输入的警告框,用于收集用户收货地址和联系电话.并选择合适的代理方法,当警告框上的两输入框有一个为空时限制“购买”按钮点击. #import "TableViewController.h" @interface TableViewController ()<UIAlertViewDelegate> @property (nonatomic, strong)