带有复选框的Android列表视图?

时间:2011-11-09 04:58:06

标签: android listview

我正在开发一个使用带有复选框的列表视图的应用程序,考虑10 items项上有list-view,并且默认情况下选中复选框,直到现在每个东西都工作正常对我来说这是我的问题,当我取消选中列表视图中的任何复选框 整个列表视图需要刷新

2 个答案:

答案 0 :(得分:13)

Nikhil请记住定义自定义适配器是一次性练习,一旦您正确定义和理解它,您就可以自定义任何视图,如ListView,GridView,Gallery,Spinner。所以请正确理解以下答案。

要使用CheckBox(或任何View)定义ListView,您必须定义自己的自定义适配器。要定义自定义适配器,请按照以下步骤操作:

  1. 定义自定义行文件(代表列表视图的每个项目)
  2. 定义适配器类并扩展BaseAdapter。
  3. 在此适配器类的getView()方法内膨胀上面的行xml文件。
  4. 在你的情况下,

    第1步:(定义行xml文件)

    <RelativeLayout>
       <TextView>
       <CheckBox>
    </RelativeLayout>
    

    第二&amp;第3步:(定义自定义适配器类)

    public class MyListViewAdapter extends BaseAdapter
    {
      ....
      ....
    
    
       static class ViewHolder {
            protected TextView text;
            protected CheckBox checkbox;
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View view = null;
            if (convertView == null) {
                LayoutInflater inflator = context.getLayoutInflater();
                view = inflator.inflate(R.layout.rowbuttonlayout, null);
                final ViewHolder viewHolder = new ViewHolder();
                viewHolder.text = (TextView) view.findViewById(R.id.label);
                viewHolder.checkbox = (CheckBox) view.findViewById(R.id.check);
                viewHolder.checkbox
                        .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    
                            @Override
                            public void onCheckedChanged(CompoundButton buttonView,
                                    boolean isChecked) {
                                Model element = (Model) viewHolder.checkbox
                                        .getTag();
                                element.setSelected(buttonView.isChecked());
    
                            }
                        });
                view.setTag(viewHolder);
                viewHolder.checkbox.setTag(list.get(position));
            } else {
                view = convertView;
                ((ViewHolder) view.getTag()).checkbox.setTag(list.get(position));
            }
            ViewHolder holder = (ViewHolder) view.getTag();
            holder.text.setText(list.get(position).getName());
            holder.checkbox.setChecked(list.get(position).isSelected());
    
    
    .......
    .......
    }
    

答案 1 :(得分:-1)

特定项目的

复选框没有信息。关于listView所以要获得它的位置,将id设置为位置,然后在点击监听器中获取id。

第二种方法是通过在checkBox上设置ListItemClickListener而不是checkListener来检查/取消选中listItemClick,这仅在列表项只有一个可单击项时才有用,这是您的复选框。