生活随笔
收集整理的這篇文章主要介紹了
【转】Android 带checkbox的listView 实现多选,全选,反选 -- 不错
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
原文網(wǎng)址:http://blog.csdn.net/onlyonecoder/article/details/8687811
Demo地址(0分資源):http://download.csdn.net/detail/onlyonecoder/5154352
?
由于listview的一些特性,剛開(kāi)始寫(xiě)這種需求的功能的時(shí)候都會(huì)碰到一些問(wèn)題,重點(diǎn)就是存儲(chǔ)每個(gè)checkbox的狀態(tài)值,在這里分享出了完美解決方法:
?
?
布局文件:
?
?
[html]?view plaincopy
<?xml?version="1.0"?encoding="utf-8"?>??<RelativeLayout?xmlns:android="http://schemas.android.com/apk/res/android"??????android:layout_width="fill_parent"??????android:layout_height="fill_parent"??????android:orientation="horizontal"?>????????<TextView??????????android:id="@+id/tv"??????????android:layout_width="fill_parent"??????????android:layout_height="wrap_content"??????????android:layout_gravity="center_vertical"?/>????????<LinearLayout??????????android:id="@+id/line"??????????android:layout_width="fill_parent"??????????android:layout_height="50dp"??????????android:layout_below="@+id/tv"??????????android:orientation="horizontal"?>????????????<Button??????????????android:id="@+id/bt_selectall"??????????????android:layout_width="80dp"??????????????android:layout_height="fill_parent"??????????????android:text="全選"?/>?????????????????<Button??????????????android:id="@+id/bt_cancleselectall"??????????????android:layout_width="80dp"??????????????android:layout_height="fill_parent"??????????????android:text="反選"?/>???????????????????????????????????<Button??????????????android:id="@+id/bt_deselectall"??????????????android:layout_width="80dp"??????????????android:layout_height="fill_parent"??????????????android:text="取消選擇"?/>????????</LinearLayout>????????<ListView??????????android:id="@+id/lv"??????????android:layout_width="fill_parent"??????????android:layout_height="fill_parent"??????????android:layout_below="@+id/line"?/>????</RelativeLayout>?? ?
?
listView 的item布局文件:
?
?
[html]?view plaincopy
<?xml?version="1.0"?encoding="utf-8"?>??<LinearLayout?xmlns:android="http://schemas.android.com/apk/res/android"??????android:layout_width="fill_parent"??????android:layout_height="fill_parent"??????android:orientation="horizontal"?>????????<TextView??????????android:id="@+id/item_tv"??????????android:layout_width="0dp"??????????android:layout_height="wrap_content"??????????android:layout_gravity="center_vertical"??????????android:layout_weight="1"?/>????????<CheckBox??????????android:id="@+id/item_cb"??????????android:layout_width="wrap_content"??????????android:layout_height="wrap_content"??????????android:clickable="false"??????????android:focusable="false"??????????android:focusableInTouchMode="false"??????????android:gravity="center_vertical"?/>????</LinearLayout>??
?
Activity:
?
?
[java]?view plaincopy
public?class?Ex_checkboxActivity?extends?Activity?{??????private?ListView?lv;??????private?MyAdapter?mAdapter;??????private?ArrayList<String>?list;??????private?Button?bt_selectall;??????private?Button?bt_cancel;??????private?Button?bt_deselectall;??????private?int?checkNum;?????private?TextView?tv_show;????????????@Override??????public?void?onCreate(Bundle?savedInstanceState)?{??????????super.onCreate(savedInstanceState);??????????setContentView(R.layout.main);??????????????????lv?=?(ListView)?findViewById(R.id.lv);??????????bt_selectall?=?(Button)?findViewById(R.id.bt_selectall);??????????bt_cancel?=?(Button)?findViewById(R.id.bt_cancelselectall);??????????bt_deselectall?=?(Button)?findViewById(R.id.bt_deselectall);??????????tv_show?=?(TextView)?findViewById(R.id.tv);??????????list?=?new?ArrayList<String>();??????????????????initDate();??????????????????mAdapter?=?new?MyAdapter(list,?this);??????????????????lv.setAdapter(mAdapter);????????????????????bt_selectall.setOnClickListener(new?OnClickListener()?{??????????????@Override??????????????public?void?onClick(View?v)?{??????????????????????????????????for?(int?i?=?0;?i?<?list.size();?i++)?{??????????????????????MyAdapter.getIsSelected().put(i,?true);??????????????????}??????????????????????????????????checkNum?=?list.size();??????????????????????????????????dataChanged();??????????????}??????????});????????????????????bt_cancel.setOnClickListener(new?OnClickListener()?{??????????????@Override??????????????public?void?onClick(View?v)?{??????????????????????????????????for?(int?i?=?0;?i?<?list.size();?i++)?{??????????????????????if?(MyAdapter.getIsSelected().get(i))?{??????????????????????????MyAdapter.getIsSelected().put(i,?false);??????????????????????????checkNum--;??????????????????????}?else?{??????????????????????????MyAdapter.getIsSelected().put(i,?true);??????????????????????????checkNum++;??????????????????????}??????????????????}??????????????????????????????????dataChanged();??????????????}??????????});????????????????????bt_deselectall.setOnClickListener(new?OnClickListener()?{??????????????@Override??????????????public?void?onClick(View?v)?{??????????????????????????????????for?(int?i?=?0;?i?<?list.size();?i++)?{??????????????????????if?(MyAdapter.getIsSelected().get(i))?{??????????????????????????MyAdapter.getIsSelected().put(i,?false);??????????????????????????checkNum--;????????????????????}??????????????????}??????????????????????????????????dataChanged();??????????????}??????????});????????????????????lv.setOnItemClickListener(new?OnItemClickListener()?{??????????????@Override??????????????public?void?onItemClick(AdapterView<?>?arg0,?View?arg1,?int?arg2,??????????????????????long?arg3)?{??????????????????????????????????ViewHolder?holder?=?(ViewHolder)?arg1.getTag();??????????????????????????????????holder.cb.toggle();??????????????????????????????????MyAdapter.getIsSelected().put(arg2,?holder.cb.isChecked());??????????????????????????????????if?(holder.cb.isChecked()?==?true)?{??????????????????????checkNum++;??????????????????}?else?{??????????????????????checkNum--;??????????????????}??????????????????????????????????tv_show.setText("已選中"?+?checkNum?+?"項(xiàng)");??????????????}??????????});??????}????????????private?void?initDate()?{??????????for?(int?i?=?0;?i?<?15;?i++)?{??????????????list.add("data"?+?"?"?+?i);??????????}??????????;??????}??????????private?void?dataChanged()?{??????????????????mAdapter.notifyDataSetChanged();??????????????????tv_show.setText("已選中"?+?checkNum?+?"項(xiàng)");??????};??}??
?
列表適配器:
?
?
[java]?view plaincopy
package?com.notice.listcheck;????import?java.util.ArrayList;??import?java.util.HashMap;????import?android.content.Context;??import?android.view.LayoutInflater;??import?android.view.View;??import?android.view.ViewGroup;??import?android.widget.BaseAdapter;??import?android.widget.CheckBox;??import?android.widget.TextView;????public?class?MyAdapter?extends?BaseAdapter?{??????????private?ArrayList<String>?list;??????????private?static?HashMap<Integer,?Boolean>?isSelected;??????????private?Context?context;??????????private?LayoutInflater?inflater?=?null;????????????public?MyAdapter(ArrayList<String>?list,?Context?context)?{??????????this.context?=?context;??????????this.list?=?list;??????????inflater?=?LayoutInflater.from(context);??????????isSelected?=?new?HashMap<Integer,?Boolean>();??????????????????initDate();??????}????????????private?void?initDate()?{??????????for?(int?i?=?0;?i?<?list.size();?i++)?{??????????????getIsSelected().put(i,?false);??????????}??????}????????@Override??????public?int?getCount()?{??????????return?list.size();??????}????????@Override??????public?Object?getItem(int?position)?{??????????return?list.get(position);??????}????????@Override??????public?long?getItemId(int?position)?{??????????return?position;??????}????????@Override??????public?View?getView(int?position,?View?convertView,?ViewGroup?parent)?{??????????ViewHolder?holder?=?null;??????????if?(convertView?==?null)?{??????????????????????????holder?=?new?ViewHolder();??????????????????????????convertView?=?inflater.inflate(R.layout.listviewitem,?null);??????????????holder.tv?=?(TextView)?convertView.findViewById(R.id.item_tv);??????????????holder.cb?=?(CheckBox)?convertView.findViewById(R.id.item_cb);??????????????????????????convertView.setTag(holder);??????????}?else?{??????????????????????????holder?=?(ViewHolder)?convertView.getTag();??????????}??????????????????holder.tv.setText(list.get(position));??????????????????holder.cb.setChecked(getIsSelected().get(position));??????????return?convertView;??????}????????public?static?HashMap<Integer,?Boolean>?getIsSelected()?{??????????return?isSelected;??????}????????public?static?void?setIsSelected(HashMap<Integer,?Boolean>?isSelected)?{??????????MyAdapter.isSelected?=?isSelected;??????}????????public?static?class?ViewHolder?{??????????TextView?tv;??????????CheckBox?cb;??????}??}?? ?
?
?
?
?
?
?
版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的【转】Android 带checkbox的listView 实现多选,全选,反选 -- 不错的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。