关闭

CheckBox的单选框实现

685人阅读 评论(0) 收藏 举报
分类:

这里有三种方法可以实现:
第一种是:直接使用CheckBox,再使用代码来修改checkBox的选中状态;
  优点:实现简单,容易懂
  缺点:需要给每个checkBox设置id
第二种是:在RadioGroup中使用自定义的RadioButton(其实就是使用图片,改变效果);
  优点:代码简单,多使用的是布局文件
  缺点:布局文件不好调
第三种是:使用CheckBox+ListView实现;
  优点:布局简单
  缺点:代码多而复杂


一、第一种方法,只使用CheckBox实现单选


(1)配置文件activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="30dp"
        android:background="#F5F5F5" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:text="以下情况,请代表根据实际情况打勾注明:"
            android:textColor="#5E5E5E"
            android:textSize="15sp" />
    </LinearLayout>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="12dp"
        android:layout_marginTop="12dp"
        android:text="1.通过调查研究形成:"
        android:textColor="#9CE1FF"
        android:textSize="15sp" />

    <CheckBox
        android:id="@+id/cb1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="12dp"
        android:checked="true"
        android:text="专题调研"
        android:textColor="#5E5E5E"
        android:textSize="15sp" />

    <CheckBox
        android:id="@+id/cb2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="12dp"
        android:text="视察"
        android:textColor="#5E5E5E"
        android:textSize="15sp" />

    <CheckBox
        android:id="@+id/cb3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="12dp"
        android:text="座谈"
        android:textColor="#5E5E5E"
        android:textSize="15sp" />

    <CheckBox
        android:id="@+id/cb4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="12dp"
        android:text="走访等其他调研方式"
        android:textColor="#5E5E5E"
        android:textSize="15sp" />

</LinearLayout>
(2)主方法MainActivity.java

package com.example;

import com.example.aaa.R;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.CheckBox;

public class MainActivity extends Activity implements OnClickListener{
	private CheckBox cb1,cb2,cb3,cb4;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.aaaa);
		
		this.cb1 = (CheckBox) findViewById(R.id.cb1);
		this.cb2 = (CheckBox) findViewById(R.id.cb2);
		this.cb3 = (CheckBox) findViewById(R.id.cb3);
		this.cb4 = (CheckBox) findViewById(R.id.cb4);
		
		cb1.setOnClickListener(this);
		cb2.setOnClickListener(this);
		cb3.setOnClickListener(this);
		cb4.setOnClickListener(this);
	}
	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.cb1:
			cb1.setChecked(true);
			cb2.setChecked(false);
			cb3.setChecked(false);
			cb4.setChecked(false);
			break;
		case R.id.cb2:
			cb1.setChecked(false);
			cb2.setChecked(true);
			cb3.setChecked(false);
			cb4.setChecked(false);
			break;
		case R.id.cb3:
			cb1.setChecked(false);
			cb2.setChecked(false);
			cb3.setChecked(true);
			cb4.setChecked(false);
			break;
		case R.id.cb4:
			cb1.setChecked(false);
			cb2.setChecked(false);
			cb3.setChecked(false);
			cb4.setChecked(true);
			break;
		default:
			break;
		}
	}	
}

二、第二种方法,使用自定义RadioButton实现单选CheckBox:


(1)在drawable文件中创建一个Raido.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item   
    	android:state_checked="false"   
    	android:drawable="@drawable/tabswitcher_short" />   
    <item   
    	android:state_checked="true"   
    	android:drawable="@drawable/tabswitcher_long" />  
</selector>
(2)布局文件activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="通过调查研究形成:" />

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <RadioGroup
            android:id="@+id/radioGroup"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:orientation="vertical" >

            <RadioButton
                android:id="@+id/btn_0"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/radio"
                android:layout_marginTop="1dp"
                android:button="@null"
                android:checked="true"
                android:gravity="center" />

            <RadioButton
                android:id="@+id/btn_1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="1dp"
                android:background="@drawable/radio"
                android:button="@null"
                android:gravity="center" />

            <RadioButton
                android:id="@+id/btn_2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="1dp"
                android:background="@drawable/radio"
                android:button="@null"
                android:gravity="center" />

            <RadioButton
                android:id="@+id/btn_3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="1dp"
                android:background="@drawable/radio"
                android:button="@null"
                android:gravity="center" />
        </RadioGroup>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@id/radioGroup"
            android:layout_marginLeft="5dp"
            android:orientation="vertical" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="3dp"
                android:text="专题调研" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="3dp"
                android:text="视察" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="3dp"
                android:text="座谈" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="3dp"
                android:text="走访等其他调研方式" />
        </LinearLayout>
    </RelativeLayout>

</LinearLayout>
(3)MainActivity.java,在这里我实现的简单,其实可以等到要使用的时候再去获取选择的值:

package com.example;

import com.example.aaa.R;

import android.app.Activity;
import android.os.Bundle;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;

public class MainActivity extends Activity{
	private RadioGroup radioGroup;
	private RadioButton radiobutton;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.aaaa);
		
		radiobutton = (RadioButton) findViewById(R.id.btn_0);
		radioGroup = (RadioGroup) this.findViewById(R.id.radioGroup);
		radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {
			
			@Override
			public void onCheckedChanged(RadioGroup group, int checkedId) {
				//System.out.println("checkID:"+checkedId);
				System.out.println("radiobutton.isChecked():"+radiobutton.isChecked());
			}
		});
	}
}

三、第三种方式,使用ListView+CheckBox实现CheckBox的单选框:


(1)创建一个adapter的布局文件list_adapter.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <CheckBox
        android:id="@+id/checkBox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="5dp"
        android:clickable="false"
        android:focusable="false"
        android:focusableInTouchMode="false" />

    <TextView
        android:id="@+id/tv_name"
        android:layout_width="210dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:textSize="14sp" />

</LinearLayout>
(2)布局文件activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
  
    <TextView  
        android:id="@+id/tv_title"
        android:layout_width="fill_parent"  
        android:layout_height="wrap_content"  
        android:text="通过调查研究形成:" />  
      
        <ListView
            android:id="@+id/listview"
            android:layout_width="fill_parent"
            android:layout_height="400dp"
            android:cacheColorHint="#00000000"
            android:clickable="true"
            android:descendantFocusability="blocksDescendants"
            android:fadingEdge="none"
            android:fastScrollEnabled="true"
            android:scrollingCache="false" />

</LinearLayout>
(3)主代码MainActivity.java:

package com.example;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.example.bbb.R;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends Activity{
    private ListView listView;     
    private Map<Integer, Boolean> isSelected;      
    private List<String> beSelectedData = new ArrayList<String>();     
    ListAdapter adapter;    
    private List<String> cs = null; 
    
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
				
		listView = (ListView) this.findViewById(R.id.listview);  
        cs  = new ArrayList<String>();  //存放显示的字符串
        cs.add("专题调研");  
        cs.add("视察");  
        cs.add("座谈"); 
        cs.add("走访等其他调研方式");  
        initList(); 
	}
	
	void initList(){   
        if (cs == null || cs.size() == 0)  
            return;         
        // 清除已经选择的项 ,用于存放当前选择的内容(字符串)
        if (beSelectedData.size() > 0) {  
            beSelectedData.clear(); 
        } 
        //将选中状态都置为false
        if (isSelected != null)  
            isSelected = null;  
        isSelected = new HashMap<Integer, Boolean>();  
        for (int i = 0; i < cs.size(); i++) {  
            isSelected.put(i, false);  
            if(i == 0){
            	isSelected.put(i, true);
            	beSelectedData.add(cs.get(i));
            }
        }   
        
        adapter = new ListAdapter(this, cs); //设置适配器
        listView.setAdapter(adapter);  
        listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);  
        adapter.notifyDataSetChanged();  //提醒适配器跟新界面
        
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {  //listview的点击事件
            public void onItemClick(AdapterView<?> parent, View view,  
                    int position, long id) {  
               Log.i("map", cs.get(position).toString());  
            }  
        });     
    } 
	
	class ListAdapter extends BaseAdapter {  
		  
        private Context context;  
        private List<String> cs;  
        private LayoutInflater inflater;  

        public ListAdapter(Context context, List<String> data) {  
            this.context = context;  
            this.cs = data;  
            inflater = LayoutInflater.from(context);  
        }   
  
        public int getCount() {  
            return cs.size();  
        }  
  
        public Object getItem(int position) {  
            return cs.get(position);  
        }  
  
        public long getItemId(int position) {  
            return 0;  
        }  
  
        public View getView(int position1, View convertView, ViewGroup parent) {  
            ViewHolder holder = null;  
            View view = null;  
            final int position = position1;
            
            //界面重用
            if (convertView == null) {  
                convertView = inflater.inflate(R.layout.list_adapter,null);  
                holder = new ViewHolder();  
                holder.checkBox = (CheckBox) convertView  
                        .findViewById(R.id.checkBox);   
                holder.tv_name = (TextView) convertView  
                        .findViewById(R.id.tv_name);  
                convertView.setTag(holder);  
            } else {  
                view = convertView;  
                holder = (ViewHolder) view.getTag();  
            }    
            
            //checkBox的点击事件
            holder.checkBox.setOnClickListener(new OnClickListener() {  
                public void onClick(View v) {  
                    // 当前点击的CheckBox是否是点击状态
                    boolean current = !isSelected.get(position);  
                    // 先将所有的置为FALSE  
                    for(Integer p : isSelected.keySet()) {  
                        isSelected.put(p, false);  
                    }  
                    // 再设置当前选择CheckBox的实际状态  
                    isSelected.put(position, current);  
                    ListAdapter.this.notifyDataSetChanged();  //跟新界面
                    
                    beSelectedData.clear();  //每次点击,都跟新点击的内容
                    if(current) beSelectedData.add(cs.get(position));  
                }  
            });  
            holder.tv_name.setText(cs.get(position).toString());  
            holder.checkBox.setChecked(isSelected.get(position));  
            return convertView;  
        }  
    }  
      
    class ViewHolder {  
        CheckBox checkBox;  
        TextView tv_name;  
    }  
}  
ok,结束!







0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:16785次
    • 积分:325
    • 等级:
    • 排名:千里之外
    • 原创:16篇
    • 转载:2篇
    • 译文:0篇
    • 评论:3条
    文章分类