JonSkeet 2013-07-08 03:36 采纳率: 0%
浏览 2098

如何使用 listview 中的 checkbox?

我在listview中设置了一个checkbox,adapter 如下:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewTag viewTag;
if(convertView == null) {
convertView = myInflater.inflate(R.layout.row, null);
viewTag = new ViewTag((CheckBox)convertView.findViewById(R.id.row_check));
convertView.setTag(viewTag);
}
else {
viewTag = (ViewTag) convertView.getTag();
}
}
class ViewTag {
CheckBox cbx;
public ViewTag(CheckBox cb) {
this.cbx = cb;
}
}

首先在 ListActivity 中,我想点击按钮来设置所有的 items 都被选择。如何实现?
然后在 ListActivity 中,如何获取已经被选择的 items ?

  • 写回答

1条回答

  • JaveZh 2013-07-08 03:43
    关注

    大致代码,你主要看思路吧

    //全选 
    btn_selectAll.setOnClickListener(new OnClickListener(){ 
    @Override
    
    public void onClick(View arg0) { 
    listStr = new ArrayList<String>(); 
    for(int i=0;i<list.size();i++){ 
    MyAdapter.isSelected.put(i,true); 
    listStr.add(name<i>); 
    } 
    
    adapter.notifyDataSetChanged();//注意这一句必须加上,否则checkbox无法正常更新状态 
    tv.setText("已选中"+listStr.size()+"项"); 
    } 
    }); 
    
    //反选 
    
    btn_inverseSelect.setOnClickListener(new OnClickListener(){ 
    @Override
    public void onClick(View v) { 
    for(int i=0;i<list.size();i++){ 
    
    if(MyAdapter.isSelected.get(i)==false){ 
    MyAdapter.isSelected.put(i, true); 
    listStr.add(name<i>); 
    } 
    else{ 
    MyAdapter.isSelected.put(i, false); 
    listStr.remove(name<i>); 
    } 
    } 
    adapter.notifyDataSetChanged(); 
    tv.setText("已选中"+listStr.size()+"项"); 
    }
    
    }); 
    //取消已选 
    btn_calcel.setOnClickListener(new OnClickListener(){ 
    @Override
    public void onClick(View v) { 
    
    for(int i=0;i<list.size();i++){ 
    
    if(MyAdapter.isSelected.get(i)==true){ 
    MyAdapter.isSelected.put(i, false); 
    listStr.remove(name<i>); 
    } 
    } 
    
    adapter.notifyDataSetChanged(); 
    tv.setText("已选中"+listStr.size()+"项"); 
    
    } 
    
    }); 
    } 
    
    // 显示带有checkbox的listview 
    public void showCheckBoxListView() { 
    list = new ArrayList<HashMap<String, Object>>(); 
    for (int i = 0; i < name.length; i++) { 
    
    HashMap<String, Object> map = new HashMap<String, Object>(); 
    map.put("item_tv", name<i>); 
    map.put("item_cb", false); 
    list.add(map); 
    
    adapter = new MyAdapter(this, list, R.layout.listviewitem, 
    new String[] { "item_tv", "item_cb" }, new int[] { 
    R.id.item_tv, R.id.item_cb }); 
    lv.setAdapter(adapter); 
    listStr = new ArrayList<String>(); 
    lv.setOnItemClickListener(new OnItemClickListener() { 
    
    @Override
    public void onItemClick(AdapterView<?> arg0, View view, int position, long arg3) { 
    ViewHolder holder = (ViewHolder) view.getTag(); 
    
    holder.cb.toggle();// 在每次获取点击的item时改变checkbox的状态 
    MyAdapter.isSelected.put(position, holder.cb.isChecked()); // 同时修改map的值保存状态 
    if (holder.cb.isChecked() == true) { 
    listStr.add(name[position]); 
    } else { 
    listStr.remove(name[position]); 
    } 
    tv.setText("已选中"+listStr.size()+"项"); 
    } 
    
    }); 
    } 
    } 
    
    评论

报告相同问题?

悬赏问题

  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?
  • ¥50 需求一个up主付费课程
  • ¥20 模型在y分布之外的数据上预测能力不好如何解决