存在的問題:
我們在操作“全部選擇”list中的元素,我們最常用的方法是,遍曆一下,然後把所有的checkbox都給選中,但是這有一個bug,就是,當選擇後,往下拉時候,下面的都沒被選中,再往上拉的時候,上面的又會被取消選擇。於是,找到一個新的解決辦法,給記下來,留著以後使用。
解決辦法
我們把選中的位置使用一個數組或者集合來記著當前選擇的狀態。
如果集合中包含這個item,那麼我們就讓他們的checkbox設定成選中狀態。
我們使用set集合來做,因為set集合可以去重複。
舉個例子:
//一、建立一個set集合private HashSet<String> itemSelected=new HashSet<String>();//二、全部選擇的點擊事件public void onClick(View v) { int id=v.getId(); switch (id) { case R.id.bt_new_msg: Intent intent = new Intent(ConversationActivity.this, NewMessageActivity.class); startActivity(intent); break; case R.id.bt_all_selected: //把選中的狀態加入到一個set集合 for(int i=0;i<adapter.getCount();i++){ Cursor cursor = (Cursor) adapter.getItem(i); String idstr = cursor.getString(ID_COLUMN_INDEX); itemSelected.add(idstr); } adapter.notifyDataSetChanged(); break; case R.id.bt_cancel_selected: break; } }三、在顯示模式的時候去判斷set集合中的元素,然後設定checkbox的選中狀態 //根據mode 模式設定checkbook if(mode==DISPLAYMODE.edit){ checkBox.setVisibility(View.VISIBLE); //checkbox是否選中的 if(itemSelected.contains(idstr)){ //選中 checkBox.setChecked(true); }else{ //不選中 checkBox.setChecked(false); } }else{ checkBox.setVisibility(View.GONE); }