android – 一次只选择一个复选框的自定义列表视图

前端之家收集整理的这篇文章主要介绍了android – 一次只选择一个复选框的自定义列表视图前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个自定义列表视图,每行包含一个复选框和文本.现在我想要的是,如果任何一个listview行的复选框被选中,那么其他行中的其他复选框如果被选中.it将被自动选择.(即一次只能选择一个复选框).我应该怎么做.

到目前为止,我所做的工作如下:

public class CustomAdapter extends BaseAdapter{

    Context context;
    List<String> items;

     boolean array[];


    public CustomAdapter(Context context,List<String> items) {
    super();
    this.context = context;
    this.items = items;
    array =new boolean[items.size()];
}


    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return items.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return items.get(position);
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public View getView(int position,View convertView,ViewGroup parent) {
        // TODO Auto-generated method stub
        View v=convertView;
        final int pos=position;
        if(v==null)
        {
            v=LayoutInflater.from(context).inflate(R.layout.list,null);
        }

        TextView txt1=(TextView) v.findViewById(R.id.textView1);
        final CheckBox chkBox=(CheckBox) v.findViewById(R.id.checkBox1);

        txt1.setText(items.get(position));
        int selectedindexitem=0;
        chkBox.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                if(chkBox.isChecked())
                {
                    array[pos]=true;


                }else{
                    array[pos]=false;
                }
            }
        }); 
        chkBox.setChecked(array[pos]);





        return v; 
    }




}

In this code i can select multiple checkBox at a time but i need only one checkBox should be checked one at a time.

解决方法

尝试更改所有项目布尔值false在通知适配器后排除选定项目,并为ListView性能实现 ViewHolder设计模式:
@Override
    public View getView(final int position,ViewGroup parent) {
        ViewHolder holder;
        if(convertView==null){
            holder = new ViewHolder();
            convertView = LayoutInflater.from(context).inflate(R.layout.list,null);
            holder.txt1 = (TextView) convertView.findViewById(R.id.textView1);
            holder.chkBox = (CheckBox) convertView.findViewById(R.id.checkBox1);
            convertView.setTag(holder);
        }else{
            holder = (ViewHolder) convertView.getTag();
        }

        holder.txt1.setText(items.get(position));
        holder.chkBox.setChecked(array[position]);
        holder.chkBox.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                for (int i=0;i<array.length;i++){
                    if(i==position){
                        array[i]=true;
                    }else{
                        array[i]=false;
                    }
                }
                notifyDataSetChanged();
            }
        });

        return convertView;
    }

    class ViewHolder{
        TextView txt1;
        CheckBox chkBox;
    }

猜你在找的Android相关文章