Режим действия (режим многократного выбора) разрушается при свертывании группы в расширяемом виде списка - PullRequest
0 голосов
/ 23 октября 2019

для моего приложения для Android, я работаю над базовым файловым менеджером, используя ExpandableListView. Я настраиваю MultiChoiceModeListener. Он работает нормально, за исключением следующего: когда я запускаю режим с несколькими выборами, скажем, через детей 2 группы 4 (считая от 0), а затем я хочу свернуть эту группу 4, режим с несколькими выборами уничтожается (вызывается onDestroyActionMode). Странно то, что (как указано здесь ) этот метод onItemCheckedStateChanged в режиме многократного выбора вызывается только тогда, когда я нажимаю на группу 4, а также ожидаемая позиция группы, на которую нажимают, не 4, а 5.

Так что я ищу ответ или подсказку, как взломать это разрушение многошумного режима против моей воли. Заранее большое спасибо.

Я добавляю фрагмент своего кода с многоэкстремальной реализацией, который в значительной степени генерируется при создании MultiChoiceModeListener:

    CustomListAdapter filesAdapter = new CustomListAdapter(getApplicationContext(), groups, children);
    ExpandableListView lv = findViewById(R.id.expList);


    lv.setChoiceMode(ExpandableListView.CHOICE_MODE_MULTIPLE_MODAL);
    lv.setMultiChoiceModeListener(new ExpandableListView.MultiChoiceModeListener() {
            @Override
            public void onItemCheckedStateChanged(android.view.ActionMode mode, int position, long id, boolean checked) {
                return;
            }

            @Override
            public boolean onCreateActionMode(android.view.ActionMode mode, Menu menu) {
                mode.getMenuInflater().inflate(R.menu.multiselect_context_menu, menu);
                isActionModeOn = true;
                actionMode = mode;
                return true;
            }

            @Override
            public boolean onPrepareActionMode(android.view.ActionMode mode, Menu menu) {
                return false;
            }

            @Override
            public boolean onActionItemClicked(android.view.ActionMode mode, MenuItem item) {
                switch (item.getItemId()) {
                    case R.id.delete_id:
                        // some stuff
                        break;

                    case R.id.export_id:
                        // some stuff
                        break;

                    case R.id.share_id:
                        // some stuff
                        break;

                    case R.id.map_id:
                        // some stuff
                        break;

                    default:
                        break;
                }
                return true;
            }

            @Override
            public void onDestroyActionMode(android.view.ActionMode mode) {
                                        // some stuff

            }
        });

...