Reputation: 1215
need help!
How do implement a sticky list header in cursor adapter.
I want a list like this
Header: December, 2014
child: day1 3000Kyats
...
child: day30 4000Kyats
Header: January 2015
child: day1 10000Kyats
.....
child: day30 4000Kyats
Header: Feburay 2015
child: day1 10000Kyats
.....
child: day28 4000Kyats
query
SELECT SUM(KeyAmount), DAY(KeyDate), MONTHNAME(MONTH(KeyDate)), YEAR(KeyDate)
FROM tbl
GROUP BY DAY(KeyDate), MONTH(KeyDate), YEAR(KeyDate)
ORDER BY YEAR(KeyDate), MONTH(KeyDate), DAY(KeyDate)
query result
Amount Day Month Year
20 29 December 2014
44 30 December 2014
25 1 January 2015
The objective is to show the sum of daily revenue with a header. Under one header, there will be a list of days of that month. It's easy with base adapter but I'm afraid that it would be slow. How do I do it using cursor adapter? is there a way?
Thanks
Upvotes: 2
Views: 1002
Reputation: 11098
If the cursor is ordered by alphabet, you need to use cursor.moveToPisition(i);
:
public class MyAdapter extends CursorAdapter implements StickListHeadersAdapter{
public long getHeaderId(int i){
mCursor.moveToPosition(i);
int j = mCursor.getColumnIndex("Column_of_name");
String name = mCursor.getString(j);
return name.charAt(0);
}
public View getHeaderView(int i, View convertView, ViewGroup viewGroup){
HeaderViewHolder holder;
if (convertView != null){
holder = (HeaderViewHolder) convertView.getTag();
}
else{
convertView = LayoutInflater.from(mContext).inflate(R.layout.list_header_tree, viewGroup, false);
holder = new HeaderViewHolder(convertView);
convertView.setTag(holder);
}
mCursor.moveToPosition(i);
int j = mCursor.getColumnIndex("Column_of_name");
String name = mCursor.getString(j);
String headerText = "" + name.charAt(0);
holder.tvHeader.setText(headerText);
return convertView;
}
//Using butterknife so HeaderViewHolder:
static class HeaderViewHolder {
@InjectView(R.id.tvHeader) TextView tvHeader;
public HeaderViewHolder(View view) {
ButterKnife.inject(this, view);
}
}
}
Upvotes: 1