日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

【转】Android 带checkbox的listView 实现多选,全选,反选 -- 不错

發(fā)布時(shí)間:2023/12/4 Android 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】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;?//?記錄選中的條目數(shù)量??
  • ????private?TextView?tv_show;//?用于顯示選中的條目數(shù)量??
  • ??
  • ????/**?Called?when?the?activity?is?first?created.?*/??
  • ??
  • ????@Override??
  • ????public?void?onCreate(Bundle?savedInstanceState)?{??
  • ????????super.onCreate(savedInstanceState);??
  • ????????setContentView(R.layout.main);??
  • ????????/*?實(shí)例化各個(gè)控件?*/??
  • ????????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>();??
  • ????????//?為Adapter準(zhǔn)備數(shù)據(jù)??
  • ????????initDate();??
  • ????????//?實(shí)例化自定義的MyAdapter??
  • ????????mAdapter?=?new?MyAdapter(list,?this);??
  • ????????//?綁定Adapter??
  • ????????lv.setAdapter(mAdapter);??
  • ??
  • ????????//?全選按鈕的回調(diào)接口??
  • ????????bt_selectall.setOnClickListener(new?OnClickListener()?{??
  • ????????????@Override??
  • ????????????public?void?onClick(View?v)?{??
  • ????????????????//?遍歷list的長(zhǎng)度,將MyAdapter中的map值全部設(shè)為true??
  • ????????????????for?(int?i?=?0;?i?<?list.size();?i++)?{??
  • ????????????????????MyAdapter.getIsSelected().put(i,?true);??
  • ????????????????}??
  • ????????????????//?數(shù)量設(shè)為list的長(zhǎng)度??
  • ????????????????checkNum?=?list.size();??
  • ????????????????//?刷新listview和TextView的顯示??
  • ????????????????dataChanged();??
  • ????????????}??
  • ????????});??
  • ??
  • ????????//?反選按鈕的回調(diào)接口??
  • ????????bt_cancel.setOnClickListener(new?OnClickListener()?{??
  • ????????????@Override??
  • ????????????public?void?onClick(View?v)?{??
  • ????????????????//?遍歷list的長(zhǎng)度,將已選的設(shè)為未選,未選的設(shè)為已選??
  • ????????????????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++;??
  • ????????????????????}??
  • ????????????????}??
  • ????????????????//?刷新listview和TextView的顯示??
  • ????????????????dataChanged();??
  • ????????????}??
  • ????????});??
  • ??
  • ????????//?取消按鈕的回調(diào)接口??
  • ????????bt_deselectall.setOnClickListener(new?OnClickListener()?{??
  • ????????????@Override??
  • ????????????public?void?onClick(View?v)?{??
  • ????????????????//?遍歷list的長(zhǎng)度,將已選的按鈕設(shè)為未選??
  • ????????????????for?(int?i?=?0;?i?<?list.size();?i++)?{??
  • ????????????????????if?(MyAdapter.getIsSelected().get(i))?{??
  • ????????????????????????MyAdapter.getIsSelected().put(i,?false);??
  • ????????????????????????checkNum--;//?數(shù)量減1??
  • ????????????????????}??
  • ????????????????}??
  • ????????????????//?刷新listview和TextView的顯示??
  • ????????????????dataChanged();??
  • ????????????}??
  • ????????});??
  • ??
  • ????????//?綁定listView的監(jiān)聽(tīng)器??
  • ????????lv.setOnItemClickListener(new?OnItemClickListener()?{??
  • ????????????@Override??
  • ????????????public?void?onItemClick(AdapterView<?>?arg0,?View?arg1,?int?arg2,??
  • ????????????????????long?arg3)?{??
  • ????????????????//?取得ViewHolder對(duì)象,這樣就省去了通過(guò)層層的findViewById去實(shí)例化我們需要的cb實(shí)例的步驟??
  • ????????????????ViewHolder?holder?=?(ViewHolder)?arg1.getTag();??
  • ????????????????//?改變CheckBox的狀態(tài)??
  • ????????????????holder.cb.toggle();??
  • ????????????????//?將CheckBox的選中狀況記錄下來(lái)??
  • ????????????????MyAdapter.getIsSelected().put(arg2,?holder.cb.isChecked());??
  • ????????????????//?調(diào)整選定條目??
  • ????????????????if?(holder.cb.isChecked()?==?true)?{??
  • ????????????????????checkNum++;??
  • ????????????????}?else?{??
  • ????????????????????checkNum--;??
  • ????????????????}??
  • ????????????????//?用TextView顯示??
  • ????????????????tv_show.setText("已選中"?+?checkNum?+?"項(xiàng)");??
  • ????????????}??
  • ????????});??
  • ????}??
  • ??
  • ????//?初始化數(shù)據(jù)??
  • ????private?void?initDate()?{??
  • ????????for?(int?i?=?0;?i?<?15;?i++)?{??
  • ????????????list.add("data"?+?"?"?+?i);??
  • ????????}??
  • ????????;??
  • ????}??
  • ????//?刷新listview和TextView的顯示??
  • ????private?void?dataChanged()?{??
  • ????????//?通知listView刷新??
  • ????????mAdapter.notifyDataSetChanged();??
  • ????????//?TextView顯示最新的選中數(shù)目??
  • ????????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?{??
  • ????//?填充數(shù)據(jù)的list??
  • ????private?ArrayList<String>?list;??
  • ????//?用來(lái)控制CheckBox的選中狀況??
  • ????private?static?HashMap<Integer,?Boolean>?isSelected;??
  • ????//?上下文??
  • ????private?Context?context;??
  • ????//?用來(lái)導(dǎo)入布局??
  • ????private?LayoutInflater?inflater?=?null;??
  • ??
  • ????//?構(gòu)造器??
  • ????public?MyAdapter(ArrayList<String>?list,?Context?context)?{??
  • ????????this.context?=?context;??
  • ????????this.list?=?list;??
  • ????????inflater?=?LayoutInflater.from(context);??
  • ????????isSelected?=?new?HashMap<Integer,?Boolean>();??
  • ????????//?初始化數(shù)據(jù)??
  • ????????initDate();??
  • ????}??
  • ??
  • ????//?初始化isSelected的數(shù)據(jù)??
  • ????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)?{??
  • ????????????//?獲得ViewHolder對(duì)象??
  • ????????????holder?=?new?ViewHolder();??
  • ????????????//?導(dǎo)入布局并賦值給convertview??
  • ????????????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);??
  • ????????????//?為view設(shè)置標(biāo)簽??
  • ????????????convertView.setTag(holder);??
  • ????????}?else?{??
  • ????????????//?取出holder??
  • ????????????holder?=?(ViewHolder)?convertView.getTag();??
  • ????????}??
  • ????????//?設(shè)置list中TextView的顯示??
  • ????????holder.tv.setText(list.get(position));??
  • ????????//?根據(jù)isSelected來(lái)設(shè)置checkbox的選中狀況??
  • ????????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ò),歡迎將生活随笔推薦給好友。