0

В моем проекте, у меня есть ExpandableListView и я поставил setMultiChoiceModeListener, как показано нижеКак выбрать элемент группы ExpandableListView в MultiChoiceMode

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

Просьба прокомментировать причину вниз голосования. – shafeeq

ответ

0

Реализовать OnGroupClickListener в

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

Repalce 2-й линии в onItemCheckedStateChanged к

selectEnable = (checkedCount != 0); 

Выделите цвет может быть изменен в getGroupView