code: public static <Item extends IItem & IExpandable> void notifyItemsChanged(final FastAdapter adapter, final ExpandableExtension expandableExtension, Item header, Set<Long> identifiers, boolean checkSubItems, boolean restoreExpandedState) {
          int subItems = header.getSubItems().size();
          int position = adapter.getPosition(header);
          boolean expanded = header.isExpanded();
          // 1) check header itself
          if (identifiers.contains(header.getIdentifier())) {
              adapter.notifyAdapterItemChanged(position);
          }
          // 2) check sub items, recursively
          IItem item;
          if (header.isExpanded()) {
              for (int i = 0; i < subItems; i++) {
                  item = (IItem) header.getSubItems().get(i);
                  if (identifiers.contains(item.getIdentifier())) {
  //                    Log.d("NOTIFY", "Position=" + position + ", i=" + i);
                      adapter.notifyAdapterItemChanged(position + i + 1);
                  }
                  if (checkSubItems && item instanceof IExpandable) {
                      notifyItemsChanged(adapter, expandableExtension, (Item) item, identifiers, true, restoreExpandedState);
                  }
              }
          }
          if (restoreExpandedState && expanded) {
              expandableExtension.expand(position);
          }
      }
docs: notifies items (incl. sub items if they are currently extended)
  
  @param adapter              the adapter
  @param header               the expandable header that should be checked (incl. sub items)
  @param identifiers          set of identifiers that should be notified
  @param checkSubItems        true, if sub items of headers items should be checked recursively
  @param restoreExpandedState true, if expanded headers should stay expanded