存在的問題:
我們在操作“全部選擇”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); }