如何在MultiChoiceMode中选择ExpandableListView组项

时间:2016-04-30 09:52:10

标签: android expandablelistview expandablelistadapter onitemlongclicklistener

在我的项目中,我有一个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 个答案:

答案 0 :(得分:0)

OnGroupClickListener实施为

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

onItemCheckedStateChanged中的第二行重新归结为

selectEnable = (checkedCount != 0);

可以在getGroupView

中更改突出显示颜色