ExpandableListView и флажки

Я пишу простой фильтр в Android и хочу использовать ExpandableListAdapter с флажками.

У меня нет проблем с созданием списка или проверки флажка. Но я действительно не знаю, как запомнить выбор. После закрытия группы и открытия снова или когда я пытаюсь открыть разные групповые флажки, это изменения.

Я пытался читать в сети об этом, но я не нашел, как решить свою проблему.

Вот мой код:

 public class TasksFilterDialog extends Dialog{ private static final String TAG = "Filter Dialog"; private static final String ChildID = "ChildID"; private static final String GroupID = "GroupID"; private boolean[] statusCheck; ExpandableListView list; SimpleExpandableListAdapter listAdapter; public TasksFilterDialog(Context context) { super(context); statusCheck = new boolean[Tasks.Status.values().length]; for(int i=0; i<statusCheck.length; i++) statusCheck[i]=true; } @Override protected void onCreate(Bundle savedInstanceState) { Log.d(TAG, "Creating dialog"); this.setContentView(R.layout.tasks_filter); list = (ExpandableListView)findViewById(R.id.filter_list); setListAdapter(); // Setting Adapter Values to use on list list.setAdapter(listAdapter); // Setting creating adapter to list setOnChildClickListeners(); Log.d(TAG, "Creating dialog successfull"); } private void setListAdapter() { Log.d(TAG, "Setting list adapter"); listAdapter = new SimpleExpandableListAdapter(this.getContext(), getGroups(), R.layout.tasks_filter_groups_layout, new String[] {GroupID}, new int[] {R.id.filter_group_text}, getChilds(), R.layout.tasks_filter_simple_element, new String[] {ChildID}, new int[] {R.id.filter_simple_element_text}); Log.d(TAG, "Setting list adapter successfull"); } private List<HashMap<String, String>> getGroups() { Log.d(TAG, "Adding groups values"); List<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>(); HashMap<String, String> statusMap = new HashMap<String, String>(); statusMap.put(GroupID, "Status"); list.add(statusMap); HashMap<String, String> usersMap = new HashMap<String, String>(); usersMap.put(GroupID, "Users"); list.add(usersMap); Log.d(TAG, "Adding groups values successfull"); return list; } private List<List<HashMap<String, String>>> getChilds() { Log.d(TAG, "Adding childs values"); List<List<HashMap<String, String>>> list = new ArrayList<List<HashMap<String, String>>>(); List<HashMap<String, String>> secList = new ArrayList<HashMap<String, String>>(); HashMap<String, String> map; Tasks.Status status[] = Tasks.Status.values(); for(int i=0; i<status.length; i++) { Log.d(TAG, "Adding child" + status[i].toString()); map = new HashMap<String, String>(); map.put(ChildID, status[i].toString()); secList.add(map); } list.add(secList); list.add(secList); Log.d(TAG, "Adding childs values succesfull"); return list; } private void setOnChildClickListeners() { list.setOnChildClickListener(new OnChildClickListener() { @Override public boolean onChildClick(ExpandableListView list, View v, int group, int id, long arg4) { CheckBox cb = (CheckBox) v.findViewById(R.id.filter_simple_element_check); cb.toggle(); switch(group){ case 0: if(statusCheck[id]) statusCheck[id]=false; else statusCheck[id]=true; break; case 1: //TODO After getting Tasks function } return false; } }); } 

}

Это зависит от того, сколько вы хотите его спроектировать. Карта> будет работать. Карта занимает позицию и дает вам набор проверенных детей. Чтобы определить, проверен ли ребенок или нет, вызовите Map.get () в группе, а затем посмотрите, содержит ли набор идентификатор дочернего элемента.

Если вы хотите проверить, проверен ли второй ребенок третьей группы, вы можете сделать следующее:

 boolean isChecked = yourMap.get(3).contains(2); 

Чтобы установить дочерний элемент:

 yourMap.get(groupNum).add(childNum); 

Чтобы установить дочерний элемент без проверки:

 yourMap.get(groupNum).remove(childNum); 

Вам нужно будет инициализировать карту, чтобы содержать пустые множества для каждой группы, чтобы избежать NPE, но это легко сделать, когда вы сначала создаете карту. Я уверен, что вы можете придумать более чистый способ сделать это, но это просто, и это сработает.

Intereting Posts
Как определить экранные программные кнопки android Как установить onClick прослушиватель для ImageButton в ViewBinder? Как findViewById () элемент @android: id / list в активности Android? Eclipse запускает режим отладки, даже когда я нажимаю «запустить», Android – База данных с ContentValue с булевой ошибкой? Отдельные пакеты Android StartActivity не работает при вызове BroadcastReciever Расчет местоположения и расстояния с использованием Wi-Fi в Android Android: java.lang.NullPointerException: попытка вызвать виртуальный метод «java.lang.String java.lang.Object.toString ()» в ссылке на нулевой объект Может ли textview иметь буквы разных цветов? Фильтр Android SearchView для просмотра списка Android Studio: ExternalSystemException Android BroadcastReceiver или простой метод обратного вызова? Сопоставление между разрешениями Android (которые мы определяем в файле manisfest) на соответствующие вызовы / методы API Android – динамическая конфигурация в градиенте на основе типа сборки