CheckBox的单选框实现
来源:互联网 发布:java 就业培训机构 编辑:程序博客网 时间:2024/05/20 12:22
这里有三种方法可以实现:
第一种是:直接使用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;@Overrideprotected 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);}@Overridepublic 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;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.aaaa);radiobutton = (RadioButton) findViewById(R.id.btn_0);radioGroup = (RadioGroup) this.findViewById(R.id.radioGroup);radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {@Overridepublic 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; @Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.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
- CheckBox的单选框实现
- CheckBox的ExpandableListView实现
- CheckBox全选的实现
- 网页checkbox三态的实现
- 带CheckBox的JTable实现
- QMenu中Checkbox的实现
- Form中checkbox的实现
- 实现 DropDownList的CheckBox多选
- JS的checkbox实现全选
- 多个checkbox实现单选的checkbox
- checkbox实现
- 制作你自己的checkBox,模仿checkBox,一种更好看的checkBox实现方式
- 实现列表CheckBox全选的Javascript
- 如何实现checkbox的全选/取消
- checkbox实现全选的多种方法
- DexExpress之CheckBox+Text的节点实现
- javacript实现TreeView中checkBox的选择
- GridView中如何实现CheckBox的全选?
- 根据浏览器导入不同css文件
- GRE写作必备句型
- 黑马程序员——Java基础---面向对象总结
- 广工anyview数据结构-03(乱码不贴)
- Bochs 最新版安装(debian) 及调试 hello world OS 详解
- CheckBox的单选框实现
- NSCharacterSet 最常用的用法
- mysql同步中索引问题
- [PsTools]psexec.exe使用范例-执行远程电脑程序(exe、bat等)
- 黑马程序员——Java基础--GUI
- 搜索引擎系列1:什么是正向索引?什么是倒排索引?
- 纪念一次差点让我哭的实验室的事情
- IIViewDeckController拖动事件与百度地图拖动事件冲突
- 关于SSH的启动的LOG4J log4j:WARN No appenders could be found for logger (org.springframework.web.context