SimpleAdapter+ListView实现复选按钮效果

1、ListView上放置了复选按钮或者按钮后,因为单击事件的冲突会导致ListView的OnItemClick(单击事件)失灵。解决办法是将复选按钮或者按钮的android:focusable属性设置为false

<CheckBox
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/ck_choice"
    android:layout_gravity="center_vertical"
    android:focusable="false"
    />

2、如果要实现ListView上复选按钮的单击事件,必须重写SimpleAdapter的getView方法

//参数1:适配器所处的上下文对象,用this表示当前Activity
//参数2:为该适配器提供数据的数据源对象,是List对象,该List对象中必须存放Map对象
//参数3:是ListView中一个View的布局文件
//参数4:是List中存放的Map对象的key值的集合
//参数5:一个View的布局文件中的控件的id的集合
SimpleAdapter simpleAdapter=new SimpleAdapter(
        this,
        datas,
        R.layout.item_drink,
        new String[]{"check","img","name","price"},
        new int[]{R.id.ck_choice,R.id.iv_drink,R.id.tv_dname,R.id.tv_price}){
     //重写getView方法
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        //获得当前的View,即获得焦点的ItemView
        View v= super.getView(position, convertView, parent);
        //获得View上的CheckBox控件
        CheckBox ckdrink=v.findViewById(R.id.ck_choice);
        final TextView tvdname=v.findViewById(R.id.tv_dname);
        final String dname=tvdname.getText().toString();
        //为CheckBox控件绑定监听
        ckdrink.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if(isChecked)
                {
                    stringBuffer.append(dname);
                    Log.i("tag",stringBuffer.toString());
                }
                else
                {
                    int start=stringBuffer.indexOf(dname);
                    Log.i("tag","start"+start);
                    stringBuffer.replace(start,start+dname.length(),"");
                }
            }
        });
        return v;
    }
};

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您解答这个问题。 ListView 是一种常用的 Android 控件,可以用于展示一系列数据。SimpleAdapter 是一种适配器,可以将数据绑定到 ListView 上。 下面是实现列表项的步骤: 1. 准备数据 首先需要准备数据。一般来说,数据可以是一个 List<Map<String, Object>>,其中每个 Map 对应一个列表项,Map 中的键值对表示列表项的属性,比如标题、图片等。例如: ``` List<Map<String, Object>> data = new ArrayList<>(); Map<String, Object> item1 = new HashMap<>(); item1.put("title", "标题1"); item1.put("image", R.drawable.icon1); data.add(item1); Map<String, Object> item2 = new HashMap<>(); item2.put("title", "标题2"); item2.put("image", R.drawable.icon2); data.add(item2); ``` 2. 创建 SimpleAdapter 接下来需要创建 SimpleAdapter,将数据绑定到 ListView 上。SimpleAdapter 的构造函数需要传入以下参数: - Context:上下文对象。 - data:数据源。 - resource:列表项的布局文件。 - from:数据源中 Map 的键名数组,表示要绑定到哪些视图上。 - to:列表项布局文件中视图的 ID 数组,表示要绑定到哪些视图上。 例如: ``` SimpleAdapter adapter = new SimpleAdapter( this, // 上下文对象 data, // 数据源 R.layout.list_item, // 列表项布局文件 new String[] { "title", "image" }, // 数据源中 Map 的键名数组 new int[] { R.id.title, R.id.image } // 列表项布局文件中视图的 ID 数组 ); ``` 3. 设置 Adapter 最后需要将 Adapter 设置到 ListView 上。例如: ``` ListView listView = findViewById(R.id.list_view); listView.setAdapter(adapter); ``` 这样就完成了列表项的实现。当然,还可以对列表项进行一些定制化,比如添加点击事件等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值