1. 程式人生 > >基於ListView和CheckBox實現多選和全選記錄的功能

基於ListView和CheckBox實現多選和全選記錄的功能

應用開發中經常會有從資料庫中讀取資料顯示,然後選中多條、全部記錄並且刪除的需求。在做定製系統聯絡人的時候也遇到這樣的需求,下面寫個簡單的通過ListView和CheckBox實現多選、全選的例子。下面是具體的程式碼,有問題請留言。程式碼下載地址:MultiSelect.rar MultiSelectActivity
  1. /** 
  2.  * @author [email protected]  
  3.  * MultiSelectActivity 
  4.  */
  5. publicclass MultiSelectActivity extends Activity implements
     OnClickListener,  
  6.         OnItemClickListener {  
  7.     privatestaticfinal String TAG = "MultiSelectActivity";  
  8.     private ListView contactsDelList;  
  9.     private Button contactsDelBtn;  
  10.     private Button contactsCancelBtn;  
  11.     private CheckBox selectAll;  
  12.     private Cursor cursor;  
  13.     private
     ContactsDeleteAdapter contactsDeleteAdapter;  
  14.     privatestaticfinal String[] PROJECTION = new String[] { Contacts._ID,  
  15.             Contacts.DISPLAY_NAME };  
  16.     privatestaticfinalint CONTACTS_ID_INDEX = 0;  
  17.     privatestaticfinalint DISPLAY_NAME_INDEX = 1;  
  18.     private ContactsDeleteListItemViews holderViews;  
  19.     privatefinalclass ContactsDeleteListItemViews {  
  20.         TextView nameView;  
  21.         CheckBox delCheckBox;  
  22.     }  
  23.     @Override
  24.     publicvoid onCreate(Bundle savedInstanceState) {  
  25.         super.onCreate(savedInstanceState);  
  26.         setContentView(R.layout.contacts_delete_activity);  
  27.         contactsDelList = (ListView) findViewById(R.id.contacts_delete_list);  
  28.         contactsDelBtn = (Button) findViewById(R.id.contacts_delete_btn);  
  29.         contactsCancelBtn = (Button) findViewById(R.id.contacts_cancel_btn);  
  30.         selectAll = (CheckBox) (findViewById(R.id.contacts_delete_list_header)  
  31.                 .findViewById(R.id.select_all));  
  32.         contactsDelList.setOnItemClickListener(this);  
  33.         contactsDelBtn.setOnClickListener(this);  
  34.         contactsCancelBtn.setOnClickListener(this);  
  35.         selectAll.setOnClickListener(this);  
  36.     }  
  37.     @Override
  38.     protectedvoid onResume() {  
  39.         super.onResume();  
  40.         refreshData();  
  41.     }  
  42.     // 查詢資料庫
  43.     privatevoid refreshData() {  
  44.         cursor = getContentResolver().query(Contacts.CONTENT_URI, PROJECTION,  
  45.                 nullnullnull);  
  46.         contactsDeleteAdapter = new ContactsDeleteAdapter(this, cursor);  
  47.         contactsDelList.setAdapter(contactsDeleteAdapter);  
  48.     }  
  49.     class ContactsDeleteAdapter extends BaseAdapter {  
  50.         Cursor cur;  
  51.         Map<Integer, Boolean> selectedMap;  
  52.         HashSet<String> delContactsIdSet;  
  53.         public ContactsDeleteAdapter(Context context, Cursor c) {  
  54.             cur = c;  
  55.             // 儲存每條記錄是否被選中的狀態
  56.             selectedMap = new HashMap<Integer, Boolean>();  
  57.             // 儲存被選中記錄作資料庫表中的Id
  58.             delContactsIdSet = new HashSet<String>();  
  59.             for (int i = 0; i < cur.getCount(); i++) {  
  60.                 selectedMap.put(i, false);  
  61.             }  
  62.         }  
  63.         @Override
  64.         public View getView(int position, View convertView, ViewGroup parent) {  
  65.             if (convertView == null) {  
  66.                 convertView = LayoutInflater.from(MultiSelectActivity.this)  
  67.                         .inflate(R.layout.contacts_delete_list_item, null);  
  68.                 holderViews = new ContactsDeleteListItemViews();  
  69.                 holderViews.nameView = (TextView) convertView  
  70.                         .findViewById(R.id.name);  
  71.                 holderViews.delCheckBox = (CheckBox) convertView  
  72.                         .findViewById(R.id.delete_list_item);  
  73.                 convertView.setTag(holderViews);  
  74.             }  
  75.             cur.moveToPosition(position);  
  76.             ContactsDeleteListItemViews views = (ContactsDeleteListItemViews) convertView  
  77.                     .getTag();  
  78.             final String name = cur.getString(DISPLAY_NAME_INDEX);  
  79.             views.nameView.setText(name);  
  80.             views.delCheckBox.setChecked(selectedMap.get(position));  
  81.             // 儲存記錄Id
  82.             if (selectedMap.get(position)) {  
  83.                 delContactsIdSet.add(String.valueOf(cur  
  84.                         .getInt(CONTACTS_ID_INDEX)));  
  85.             } else {  
  86.                 delContactsIdSet.remove(String.valueOf(cur  
  87.                         .getInt(CONTACTS_ID_INDEX)));  
  88.             }  
  89.             return convertView;  
  90.         }  
  91.         @Override
  92.         publicint getCount() {  
  93.             return cur.getCount();  
  94.         }  
  95.         @Override
  96.         public Object getItem(int position) {  
  97.             if (cur.moveToPosition(position)) {  
  98.                 return cur;  
  99.             } else {  
  100.                 returnnull;  
  101.             }  
  102.         }  
  103.         @Override
  104.         publiclong getItemId(int position) {  
  105.             return position;  
  106.         }  
  107.     }  
  108.     @Override
  109. 相關推薦

    基於ListViewCheckBox實現記錄功能

    應用開發中經常會有從資料庫中讀取資料顯示,然後選中多條、全部記錄並且刪除的需求。在做定製系統聯絡人的時候也遇到這樣的需求,下面寫個簡單的通過ListView和CheckBox實現多選、全

    Android中使用ListViewCheckBox實現購物車功能

    1效果圖 2MainActivity對應的佈局activity_main <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:to

    jqueryjs分別實現獲取checkbox的值+jquery實現

    //jquery實現全選 $(function(){ $("#checkAll").click(function(){ $(".checkOne").attr("checked",this.checked) }) }) //批量刪除jquery實現提示 function p_d

    Android裡ListView裡面新增CheckBox實現

    1. 我在網上找了很多關於這個方面的文章,因為現在Android裡的ListView基本上都用到了ViewHolder,用到了convertView。 2. 網上有的文章也有用到convertView的,只是資料多了CheckBox的選擇基本上是出錯的了。 3.我想過用Ad

    js實現checkbox取消,子複框也自動

    <input type="checkbox" id="allcheck" onclick="demo()" />全選 <input type="checkbox" name="choice" class="checknum" onclick="se

    EasyUI下拉框實現、複模糊查詢

    其實整個的思路還是很麻煩的。之前網上查不到能囊括上面所有東西的。但是參考之後還是摸出了一種新的方法,但是仍然不完美。畢竟是在封裝的東西上面修改。程式碼實現:<!DOCTYPE html> <html lang="en"> <head&g

    android UI進階之實現listviewcheckbox記錄

     今天繼續和大家分享涉及到listview的內容。在很多時候,我們會用到listview和checkbox配合來提供給使用者一些選擇操作。比如在一個清單頁面,我們需要記錄使用者勾選了哪些條目。這個的實現並不太難,但是有很多朋友來問我如何實現,他們有遇到各種各樣的問

    【Java並發編程】之六:RunnableThread實現線程的區別(含代碼)

    技術分享 runnable 避免 實際應用 details div 一個 預測 enter 轉載請註明出處:http://blog.csdn.net/ns_code/article/details/17161237 Java中實現多線程有兩種方法:繼承Thre

    使用Python之paramiko模塊threading實現線程登錄臺Linux服務器

    python ssh paramikothreading 遠程 有時候我們需要在多臺Linux服務器上面執行同樣的命令,或者同樣的操作,如果我們每一臺單獨登錄上去做這樣太麻煩了,所以我們可以考慮使用自動化腳本來實現。我這裏使用Python多線程的方式,這樣速度更快,如果使用Sh

    Java - Thread Runnable實現線程

    abs java jdk1 public adt system 轉載 作用 final Java多線程系列--“基礎篇”02之 常用的實現多線程的兩種方式 概要 本章,我們學習“常用的實現多線程的2種方式”:Thread 和 Runnable。之所以說是常用的,是因為通

    js實現

    onclick check checkbox rip () nbsp title false style <html> <head> <title></title> </head> <style>

    【JS】用checked實現

    <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf8"> <title>無標題文件</title>

    Java併發程式設計(6):RunnableThread實現執行緒的區別(含程式碼)

    Java中實現多執行緒有兩種方法:繼承Thread類、實現Runnable介面,在程式開發中只要是多執行緒,肯定永遠以實現Runnable介面為主,因為實現Runnable介面相比繼承Thread類有如下優勢: 1、可以避免由於Java的單繼承特性而帶來的侷限; 2、增強程式的健壯性,程式碼能夠被多個執行

    Java並發編程(6):RunnableThread實現線程的區別(含代碼)

    線程休眠 ket out dde 可能 休眠 stat for oid Java中實現多線程有兩種方法:繼承Thread類、實現Runnable接口,在程序開發中只要是多線程,肯定永遠以實現Runnable接口為主,因為實現Runnable接口相比繼承Thread類有如下優

    Vue起步之實現物件元件

    1多物件: <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Vue.js</title> <link rel="styl

    JavaScript實現繼承的封裝操作示例

    封裝Encapsulation 如下程式碼,這就算是封裝了 (function (windows, undefined) { var i = 0;//相對外部環境來說,這裡的i就算是封裝了 })(window, undefined); 繼承Inheritance (functi

    [原始碼和文件分享]基於QtOpenCV實現彩色圖灰度圖的轉換

    一、實驗目的與要求 1.1 目的 熟悉Qt視覺化開發,理解C++的面向物件思想 熟悉Qt和Opencv開發環境搭建 瞭解Qt訊息機制 初步理解Opencv的用法 學會使用c++異常處理 1.2 要求 使用Qt編寫一程式,點

    CSS+checkbox 實現按鈕 標籤

    效果圖:         CSS: input[type="checkbox"] { position: absolute; clip: rect(0, 0, 0,

    MVC身份驗證.MVC過濾器.MVC6關鍵字Task,Async.前端模擬表單驗證,提交.自定義匿名集合.Edge匯出到Excel.BootstrapTree樹狀選單的.bootstrap可搜尋可下拉框

    在寫這篇部落格之前要嘮叨幾句.本人已從事開發四年有餘.從前兩年的熱情如火.到現在的麻木.總感覺要像上突破.卻又不敢輕舉妄動. 沒事就寫點基礎程式碼.指點下新人吧 1.MVC身份驗證.    有兩種方式.一個是傳統的所有控制器繼承自定義Control,然後再裡面用MVC的過濾器攔截.所以每次網站的後臺被訪問時.

    結合apachetomcat實現域名、埠繫結

    1、本機測試的話,要先配置主機頭系統:windowsxp     C:\WINDOWS\system32\drivers\etc\hosts檔案 新增     127.0.0.1       www.abc.com     127.0.0.1       www.efg.c