假如ListView,分紅2頁(或者設置數據能夠縱向拉,可隱藏),每頁3條數據,每一個Listview的Item 裏面有個checkBox,如今,當我選擇第一頁的前兩天數據,翻到第二頁,居然第二頁後兩條數據也選中了,這是絕對不容許的。通過本人的N次調試,發現public View getView(int position, View convertView, ViewGroup parent)傳進來的convertView居然產生屢次重用。解決方案:當選中checkedBox時候,咱們用一個List來保存該checkBox的position。而後在每次產生View時取得傳來的convertView賦值爲null,再遍歷List裏保存的checkBox的位置,當在數組內時,checkBox置爲選中,問題解決了。html
該問題有解決方案,我的目前所實現了的。android
HashMap<Integer, Boolean> state = new HashMap<Integer,Boolean>(); public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { // TODO Auto-generated method stub if(isChecked) { state.put(position, isChecked); System.out.println("複選框以選中,選中的行數爲:" + temp_position); }else{ state.remove(position); } }
在getView()方法裏面:git
holder.cbox.setChecked(state.get(position)==null? false : true);
private static List<String> selected = new ArrayList<String>(); cbSelect.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { if (cbSelect.isChecked()) { selected.add(String.valueOf(fid)); } else if (!cbSelect.isChecked()) { selected.remove(String.valueOf(position)); } } });
在getView()方法裏面:github
cbSelect.setChecked((selected.contains(String.valueOf(position))));
public View getView(int position, View convertView, ViewGroup parent)在每次傳進convertView時候,設爲null。數組
而後每調用一次getView就產生一個view對象。ide
快速實現Android多級樹形列表,這個庫是在鴻洋多級樹形列表demo中修改而來。調試
解決的問題:code
支持ID爲int類型和String類型。htm
支持多級複選框選中,使用只需一行代碼。
支持動態更新數據並保持原有展開/關閉狀態。
支持ListView、RecyclerView。