android项目 之 来电管家(2) ----- ListView+CheckBox的使用

          上一节,已经完成了来电管家的界面设计,那么下面就要实现具体的功能了,如何将添加的黑白名单显示呢?这里用到了ListView,那么,如果需要删除黑白名单呢,是一个个长按弹出菜单删除,还是将所的黑白名单清空呢,这都不符合用户的需求,往往,都是删除多个,这就有个问题了,如何在ListView中删除指定的多个item呢??可能大家想到了,要用到CheckBox。

          先看图:

         

        可以看出,当处于删除模式时,底部按钮也变成了删除与返回,中间也显示了当前共选择了多少项,而且在ListView的每一个Item右边也显示出了CheckBox,用于多选。

        这一节,只实现如何显示,并且为ListView添加监听器,下节再实现的黑白名单的增加与删除。

       

       黑白名单的布局文件上一节已给出,既然用到了ListView,必然要有Adapter,这里依然采用的是BaseAdapter,主要代码如下:

 class Adapter extends BaseAdapter{
        private Context context;
        private LayoutInflater inflater=null;
        private HashMap<Integer, View> mView ;
        public  HashMap<Integer, Integer> visiblecheck ;//用来记录是否显示checkBox
        public  HashMap<Integer, Boolean> ischeck;
        private TextView txtcount;

        public Adapter(Context context,TextView txtcount)
        {
            this.context = context;
            this.txtcount = txtcount;
            inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            mView = new HashMap<Integer, View>();
            visiblecheck = new HashMap<Integer, Integer>();
            ischeck      = new HashMap<Integer, Boolean>();
            if(isMulChoice){
                for(int i=0;i<array.size();i++){
                    ischeck.put(i, false);
                    visiblecheck.put(i, CheckBox.VISIBLE);
                }
            }else{
                for(int i=0;i<array.size();i++)
                {
                    ischeck.put(i, false);
                    visiblecheck.put(i, CheckBox.INVISIBLE);
                }
            }
        }

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

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

        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return 0;
        }
       
        public View getView(final int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            View view = mView.get(position);
            if(view==null)
            {
                view = inflater.inflate(R.layout.list_item, null);
                TextView id = (TextView)view.findViewById(R.id.tv_id);
                TextView name = (TextView)view.findViewById(R.id.tv_name);
                TextView number = (TextView)view.findViewById(R.id.tv_number);
                final CheckBox ceb = (CheckBox)view.findViewById(R.id.cb_choose);
                
                Person p = array.get(position);
                id.setText(p.id+"");
                name.setText(p.name);
                number.setText(p.number);
                
                ceb.setChecked(ischeck.get(position));
                ceb.setVisibility(visiblecheck.get(position));
                
                view.setOnLongClickListener(new Onlongclick());
                
                view.setOnClickListener(new OnClickListener() {
                    
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        if(isMulChoice){
                            if(ceb.isChecked()){
                                ceb.setChecked(false);
                                selectid.remove(array.get(position));
                            }else{
                                ceb.setChecked(true);
                                selectid.add(array.get(position));
                            }
                            
                            txtcount.setText("共选择了"+selectid.size()+"项");
                        }else {
                            //Toast.makeText(context, "点击了"+array.get(position), Toast.LENGTH_LONG).show();
                        }
                    }
                });
                
                mView.put(position, view);
            }
            return view;
        }
        class Onlongclick implements OnLongClickListener{

            public boolean onLongClick(View v) {
                // TODO Auto-generated method stub
                
                isMulChoice = true;
                selectid.clear();
                add_layout.setVisibility(View.GONE);
                delete_layout.setVisibility(View.VISIBLE);
                for(int i=0;i<array.size();i++)
                {
                    adapter.visiblecheck.put(i, CheckBox.VISIBLE);
                }
                adapter = new Adapter(context,txtcount);
                lv_show.setAdapter(adapter);
                
                return true;
            }
        }
   
    }

           其中的Onlongclick是给ListView的item添加长按监听器,实现弹出CheckBox,及底部删除按钮的功能。这里面用到了控件的隐藏与显示,剩下的就是控件的声明与定义。并为ListView绑定监听器。

	private List<Person> array = new ArrayList<Person>();
    	private List<Person> selectid = new ArrayList<Person>();
	private ListView lv_show;
	private CheckBox cb;
	private TextView tv_count;
	private RelativeLayout add_layout;
	private RelativeLayout delete_layout;
	private Adapter adapter;

           其中Person是自定义的类:

           Person.java

public class Person {
	 String name;
	 String number;
	 int id;
	public Person(int id,String name,String number) {
		this.id = id;
		this.name = name;
		this.number = number;
	}
}

 

    tv_count = (TextView)findViewById(R.id.tv_select);   
    add_layout = (RelativeLayout)findViewById(R.id.add_layout);
    delete_layout = (RelativeLayout)findViewById(R.id.delete_layout);
    lv_show = (ListView)findViewById(R.id.lv_show);

        这里只是主要的代码,完整的代码我会打包上传的。

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。