Как выбрать элемент группы ExpandableListView в MultiChoiceMode

В моем проекте у меня есть ExpandableListViewи я устанавливаюsetMultiChoiceModeListener, как показано ниже

elvItemList = (ExpandableListView) root.findViewById(R.id.elv_item_list);
elvItemList.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE_MODAL);
elvItemList.setMultiChoiceModeListener(new SMMultiChoiceModeListener());

реализация SMMultiChoiceModeListenerзаключается в следующем:

private class SMMultiChoiceModeListener implements AbsListView.MultiChoiceModeListener {
    @Override
    public void onItemCheckedStateChanged(ActionMode mode,
                                          int position, long id, boolean checked) {
        final int checkedCount = elvItemList.getCheckedItemCount();
        selectEnable = true;
        mode.setSubtitle("" + checkedCount + " items selected");
        smListAdapter.checkedItems.put(position, checked);
        smListAdapter.notifyDataSetChanged();
    }

    @Override
    public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
        MenuInflater inflater = activity.getMenuInflater();
        inflater.inflate(R.menu.selection_menu, menu);
        actionMode.setTitle("Select Items");
        return true;
    }

    @Override
    public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {
        return true;
    }

    @Override
    public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
        switch (menuItem.getItemId()) {
            case R.id.action_set_favorite:
                Toast.makeText(activity, "set favorite " + elvItemList.getCheckedItemCount() +
                        " items", Toast.LENGTH_SHORT).show();
                actionMode.finish();
                break;
            default:
                Toast.makeText(activity, "Clicked " + menuItem.getTitle(),
                        Toast.LENGTH_SHORT).show();
                break;
        }
        return true;
    }

    @Override
    public void onDestroyActionMode(ActionMode actionMode) {
        smListAdapter.checkedItems.clear();
        smListAdapter.notifyDataSetChanged();
    }
}

Я также реализован onGroupClickListenerкак

public boolean onGroupClick(ExpandableListView expandableListView, View view, int i, long l) {
    if(selectEnable) {
        Utils.logit("SMLOG", "Clicking");
        return true;
    }
    return false;
}

здесь selectEnableпеременная используется для блокирования расширения после ItemLongClickзапуска события.

Проблема:
Когда когда-либо я ItemLongClickувижу панель действий появится в верхней части, и показывает сообщение. После этого расширение группы будет заблокировано (это ожидается). Мне нужно выбрать пункт группы на itemClick, но он не работает в моем случае. Кто-нибудь может мне помочь?

1 ответ

  1. Реализовать OnGroupClickListenerкак

       @Override
        public boolean onGroupClick(ExpandableListView expandableListView, View view, int i, long l) {
            elvItemList.setItemChecked(i, !elvItemList.isItemChecked(i));
            return selectEnable;
        }
    

    повторите 2-ю строку вonItemCheckedStateChanged

    selectEnable = (checkedCount != 0);
    

    Цвет выделения может быть изменен в getGroupView