在我的项目中,我有一个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上选择组项,但它在我的情况下不起作用。谁能帮我?
答案 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