@Override
 public boolean performItemClick(View view, int position, long id) {
   OnItemClickListener listener = getOnItemClickListener();
   int headerViewsCount = getHeaderViewsCount();
   final int viewType = adapter.getItemViewType(position - headerViewsCount);
   if (viewType == adapter.headerViewType) {
     if (onHeaderClickListener != null) {
       position = adapter.translateListViewPosition(position - headerViewsCount);
       onHeaderClickListener.onHeaderClick(this, view, position, id, false);
       return true;
     }
     return false;
   } else if (viewType == adapter.dividerViewType) {
     return false;
   } else {
     if (listener != null) {
       if (position >= adapter.getCount()) {
         position -= adapter.getHeaderCount();
       } else if (!(position < headerViewsCount)) {
         position =
             adapter.translateListViewPosition(position - headerViewsCount) + headerViewsCount;
       }
       listener.onItemClick(this, view, position, id);
       return true;
     }
     return false;
   }
 }
 @Override
 public boolean onItemLongClick(AdapterView<?> l, View v, int position, long id) {
   if (onItemLongClickListenerDelegate != null) {
     return onItemLongClickListenerDelegate.onItemLongClick(
         l, v, adapter.translateListViewPosition(position), id);
   }
   return false;
 }
 @Override
 protected ContextMenuInfo getContextMenuInfo() {
   AdapterContextMenuInfo info =
       (android.widget.AdapterView.AdapterContextMenuInfo) super.getContextMenuInfo();
   info.position = adapter.translateListViewPosition(info.position - getHeaderViewsCount());
   info.position += getHeaderViewsCount();
   return info;
 }
 @Override
 public SparseBooleanArray getCheckedItemPositions() {
   SparseBooleanArray superCheckeditems = super.getCheckedItemPositions();
   if (adapter != null && !isCalledFromSuper() && superCheckeditems != null) {
     SparseBooleanArray checkeditems = new SparseBooleanArray(superCheckeditems.size());
     for (int i = 0; i < superCheckeditems.size(); i++) {
       int key = adapter.translateListViewPosition(superCheckeditems.keyAt(i));
       boolean value = superCheckeditems.valueAt(i);
       checkeditems.put(key, value);
     }
     return checkeditems;
   }
   return superCheckeditems;
 }