目录:
1.CheckBox应用场景
2.CheckBox一般使用
3.自定义CheckBox
4.CheckBox在ListView中的问题

1.CheckBox应用场景
CheckBox应用于可多选的场景,比如多文件的增删改查,移动,以及爱好啊这些的选择等等

2.CheckBox简单使用
    1)主布局文件
<?xml version="1.0" encoding="utf-8"?>                                                
    2)Java文件
package com.example.elimy.checkboxui;import android.os.Bundle;import android.support.design.widget.FloatingActionButton;import android.support.design.widget.Snackbar;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.Toolbar;import android.view.View;import android.view.Menu;import android.view.MenuItem;import android.widget.Button;import android.widget.CheckBox;import android.widget.CompoundButton;import android.widget.TextView;import java.util.ArrayList;public class MainActivity extends AppCompatActivity implements CompoundButton.OnCheckedChangeListener {    private CheckBox musicCkb;    private CheckBox tripCkb;    private CheckBox filmCkb;    private CheckBox gameCkb;    private TextView result_tv;    private Button endBtn;    //爱好数组    ArrayList hobbies=new ArrayList();    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //初始化控件        musicCkb = (CheckBox) findViewById(R.id.chb_music);        tripCkb = (CheckBox) findViewById(R.id.chb_trip);        filmCkb = (CheckBox) findViewById(R.id.chb_film);        gameCkb = (CheckBox) findViewById(R.id.chb_game);        result_tv = (TextView) findViewById(R.id.result_tv);        endBtn= (Button) findViewById(R.id.end);        //设置监听器        musicCkb.setOnCheckedChangeListener(this);        tripCkb.setOnCheckedChangeListener(this);        filmCkb.setOnCheckedChangeListener(this);        gameCkb.setOnCheckedChangeListener(this);        //为button设置监听器        endBtn.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                StringBuilder sb=new StringBuilder();              for (int i =0;i
3)效果截图

3.自定义CheckBox
注:自定义的方式有很多种,在此就实现一种,如果伙伴们感兴趣,可以去我前面的文章中查看其他几种实现方式
1)导入背景图片(原谅我盗图,当然只做自己学习所用,伙伴们可别学我)
2)实现checkbox_selector.xml
<?xml version="1.0" encoding="utf-8"?>        

3)主布局
<?xml version="1.0" encoding="utf-8"?>                                                

4)Java文件(可参考2)

5)效果截图


4.CheckBox在ListView中的问题
注:我们经常会有需求是在ListView中去全选、多选、取消选择选项,同时在ListView中我们常用ConvertView去优化效率,但是加入
CheckBox后,当我们选择的item被滑动消失后又出现时,因为item复用的缘故,被选中的状态可能消失,所以接下来我们主要的目的就是解决这个问题


1)单个list item布局list_item.xml
<?xml version="1.0" encoding="utf-8"?> 

2)主布局文件chb_list_activity.xml
<?xml version="1.0" encoding="utf-8"?>            

3)适配器类MyAdapter.java
package com.example.elimy.checkboxui;import android.content.Context;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.CheckBox;import android.widget.TextView;import java.util.ArrayList;import java.util.HashMap;import java.util.Map;/** * Created by elimy on 2016-08-07. * 功能:实现数据与布局的绑定 */public class MyAdapter extends BaseAdapter {    private ArrayList  list =null;    private Context context=null;    private LayoutInflater inflater= null;    private static HashMap checkeds=null;    /*    实现checkeds属性的get set方法,方便在布局类中设置值     */    public HashMap getCheckeds() {        return checkeds;    }    public void setCheckeds(HashMap checkeds) {        MyAdapter.checkeds = checkeds;    }    /*    * Context:上下文    * ArrayList>:    * String []:显示Map中的key数组    * int[]:布局id的数组    * */    public MyAdapter(Context context,ArrayList list) {        this.list =list;        this.context=context;        this.inflater=LayoutInflater.from(context);        //实例化checkbox状态Map        checkeds=new HashMap();        for (int i=0;i

4)主布局类ChbListActivityActivity.java
package com.example.elimy.checkboxui;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;import android.widget.AdapterView;import android.widget.Button;import android.widget.CheckBox;import android.widget.CompoundButton;import android.widget.ListView;import android.widget.TextView;import android.widget.Toast;import java.util.ArrayList;public class ChbListActivityActivity extends AppCompatActivity {    private ListView listView;    private Button selectAll,unSelect;    private ArrayList data= null ;    private CheckBox checkBox;    private int checkedNum =0;    private TextView item_tv;    /**     * list需要的资源:1.适配器adapter 2.listview 3.数据     *     */    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.chb_list_activity);        //初始化        selectAll = (Button) findViewById(R.id.selectAll);        unSelect = (Button) findViewById(R.id.unSelect);        checkBox = (CheckBox)findViewById(R.id.checkbox);        item_tv = (TextView) findViewById(R.id.item_tv);        //初始化listview        listView = (ListView) findViewById(R.id.listview);        //初始化数据        final ArrayList data = initData();        //初始化适配器         final MyAdapter myAdapter = new MyAdapter(ChbListActivityActivity.this,data);        //为listView设置适配器        listView.setAdapter(myAdapter);        //selectAll设置监听器        selectAll.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                for (int i = 0; i < data.size(); i++) {                    myAdapter.getCheckeds().put(i, true);                }                //数据改变通知                myAdapter.notifyDataSetChanged();            }        });        //unSelect取消监听        unSelect.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                for(int i=0; i parent, View view, int position, long id) {               // checkboxClick(myAdapter,position);                //取得viewHolder实例,避免一层层的去找CheckBox                MyAdapter.ViewHolder holder= (MyAdapter.ViewHolder) view.getTag();                //更改CheckBox状态                holder.ckb.toggle();                //记录CheckBox状态                myAdapter.getCheckeds().put(position,holder.ckb.isChecked());               //获取单击项的文本                String s = data.get(position);                if(holder.ckb.isChecked()==true){                    Toast.makeText(ChbListActivityActivity.this,"你选了"+s,Toast.LENGTH_SHORT).show();                }else {                    Toast.makeText(ChbListActivityActivity.this,"你取消了选择"+s,Toast.LENGTH_SHORT).show();                }                //数据改变通知                myAdapter.notifyDataSetChanged();            }        });    }    /*    *单击事件的另一种处理方法     */    public void checkboxClick(MyAdapter myAdapter, int position){        String s = data.get(position);        Log.d("String","s");        if (myAdapter.getCheckeds().get(position)==true) {            myAdapter.getCheckeds().put(position, false);            Toast.makeText(ChbListActivityActivity.this,"你取消了选择"+s,Toast.LENGTH_SHORT).show();        }else{            Toast.makeText(ChbListActivityActivity.this,"你选择了"+s,Toast.LENGTH_SHORT).show();            myAdapter.getCheckeds().put(position, true);        }        myAdapter.notifyDataSetChanged();    }    /*    * 初始化数据    */    private ArrayList initData() {        data = new ArrayList();            //初始化TextView text数组            for(int i=0;i<18;i++){                data.add("数据" + i);            }        return data;    }}

5)效果截图



更多相关文章

  1. Android(安卓)调用摄像头拍照 以及 从相册中选择照片
  2. 使用ViewPager来实现Tab的效果
  3. 【Android(安卓)开发教程】LinearLayout线性布局
  4. Android(安卓)studio中为app添加多语言支持
  5. android AlertDialog布局 ——2
  6. Android侧拉框Demo
  7. libgdx的使用--环境搭建测试
  8. 菜鸟Android(1)
  9. android通过反射获取wifi热点ap的ssid和password

随机推荐

  1. Android中的Binder概述
  2. android面试(2)----组件
  3. android 笔记——listView应用
  4. Android(安卓)AM命令
  5. Android(安卓)事件触发机制的深入学习
  6. Android中shape的使用
  7. Android绘图之Paint的使用方法详解
  8. EditText 各部分颜色设置小结
  9. android视频播放-饺子播放器
  10. android菜单的使用