2015-04-21 51 views
1

如何獲取ExpandableListView中所有選擇的項目與乘法選擇模式?ExpadableListView獲取選定的項目android

adapter = new ExpListAdapter(getActivity(), groups); 
    expandableListView.setAdapter(adapter); 
    adapter.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE); 
    expandableListView.setGroupIndicator(null); 
    expandableListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() { 

     @Override 
     public boolean onChildClick(ExpandableListView parent, View v, 
            int groupPosition, int childPosition, long id) { 
      adapter.setClicked(groupPosition, childPosition); 
      int index = parent.getFlatListPosition(ExpandableListView.getPackedPositionForChild(groupPosition, childPosition)); 
      parent.setItemChecked(index, true); 
      return true; 
     } 
    }); 

當選擇所有項目時,我希望獲取它們的ID或值並提交下一個活動的意圖。 和轉接

public class ExpListAdapter extends BaseExpandableListAdapter { 
////////// 

public void setClicked(int groupPosition, int childPosition) { 
    SparseBooleanArray checkedChildPositionsMultiple = checkedPositions.get(groupPosition); 
    // if in the group there was not any child checked 
    if (checkedChildPositionsMultiple == null) { 
     checkedChildPositionsMultiple = new SparseBooleanArray(); 
     // By default, the status of a child is not checked 
     // So a click will enable it 
     checkedChildPositionsMultiple.put(childPosition, true); 
     checkedPositions.put(groupPosition, checkedChildPositionsMultiple); 
    } else { 
     boolean oldState = checkedChildPositionsMultiple.get(childPosition); 
     checkedChildPositionsMultiple.put(childPosition, !oldState); 
    } 

    notifyDataSetChanged(); 
} 

回答

2

使用下面的代碼段跟蹤所有檢查/選擇的項目。您可能需要對此代碼進行一些更改,但邏輯保持不變。

if (save_state[position] == true) { 
     viewHolder.check_box.setChecked(true); 
    } else if (save_state[position] == false) { 
     viewHolder.check_box.setChecked(false); 
    } 

    viewHolder.check_box.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      if (save_state[pos] == false) { 
       save_state[pos] = true; 
       selectedItemArray.add(populateList.get(pos)); 
       if (selectedItemArray.size() == populateList.size()) { 
        // all the item are checked/selected no 
       } 
      } else if (save_state[pos] == true) { 
       save_state[pos] = false; 
       selectedItemArray.remove(populateList.get(pos)); 
      } 
     } 
    });