@SuppressWarnings("incomplete-switch") @Override public View getHeaderView(int position, View convertView, ViewGroup parent) { HeaderViewHolder holder; if (convertView == null) { convertView = inflater.inflate(R.layout.header, parent, false); holder = new HeaderViewHolder(); holder.text = (TextView) convertView.findViewById(R.id.text); holder.sumExpense = (TextView) convertView.findViewById(R.id.sum_expense); holder.sumIncome = (TextView) convertView.findViewById(R.id.sum_income); holder.sumTransfer = (TextView) convertView.findViewById(R.id.sum_transfer); holder.interimBalance = (TextView) convertView.findViewById(R.id.interim_balance); convertView.setTag(holder); } else { holder = (HeaderViewHolder) convertView.getTag(); } Cursor c = getCursor(); c.moveToPosition(position); int year = c.getInt( mAccount.grouping.equals(Grouping.WEEK) ? columnIndexYearOfWeekStart : columnIndexYear); int second = -1; if (mGroupingCursor != null) { mGroupingCursor.moveToFirst(); // no grouping, we need the first and only row if (mAccount.grouping.equals(Grouping.NONE)) { fillSums(holder, mGroupingCursor); } else { traverseCursor: while (!mGroupingCursor.isAfterLast()) { if (mGroupingCursor.getInt(columnIndexGroupYear) == year) { switch (mAccount.grouping) { case YEAR: fillSums(holder, mGroupingCursor); break traverseCursor; case DAY: second = c.getInt(columnIndexDay); if (mGroupingCursor.getInt(columnIndexGroupSecond) != second) break; else { fillSums(holder, mGroupingCursor); break traverseCursor; } case MONTH: second = c.getInt(columnIndexMonth); if (mGroupingCursor.getInt(columnIndexGroupSecond) != second) break; else { fillSums(holder, mGroupingCursor); break traverseCursor; } case WEEK: second = c.getInt(columnIndexWeek); if (mGroupingCursor.getInt(columnIndexGroupSecond) != second) break; else { fillSums(holder, mGroupingCursor); break traverseCursor; } } } mGroupingCursor.moveToNext(); } } if (!mGroupingCursor.isAfterLast()) mappedCategoriesPerGroup.put( position, mGroupingCursor.getInt(columnIndexGroupMappedCategories) > 0); } holder.text.setText(mAccount.grouping.getDisplayTitle(getActivity(), year, second, c)); // holder.text.setText(mAccount.grouping.getDisplayTitle(getActivity(), year, second, // mAccount.grouping.equals(Grouping.WEEK)?this_year_of_week_start:this_year, // this_week,this_day)); return convertView; }