Note that there are some explanatory texts on larger screens.

plurals
  1. POCustom ListView with Date as SectionHeader (Used custom SimpleCursorAdapter)
    primarykey
    data
    text
    <p>I want to display ListView with Date as SectionHeader. </p> <p><strong>What i have :</strong> I am displaying ListView from sqlite database using custom SimpleCursorAdapter.</p> <p>My Custom SimpleCursorAdapter is :</p> <pre class="lang-java prettyprint-override"><code>public class DomainAdapter extends SimpleCursorAdapter{ private Cursor dataCursor; private LayoutInflater mInflater; public DomainAdapter(Context context, int layout, Cursor dataCursor, String[] from, int[] to) { super(context, layout, dataCursor, from, to); this.dataCursor = dataCursor; mInflater = LayoutInflater.from(context); } public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView = mInflater.inflate(R.layout.todo_row, null); holder = new ViewHolder(); holder.text1 = (TextView) convertView.findViewById(R.id.label);//Task Title holder.text2 = (TextView) convertView.findViewById(R.id.label2);//Task Date holder.img = (ImageView) convertView.findViewById(R.id.task_icon); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } dataCursor.moveToPosition(position); int title = dataCursor.getColumnIndex("title"); String task_title = dataCursor.getString(title); int title_date = dataCursor.getColumnIndex("day"); String task_day = dataCursor.getString(title_date); int description_index = dataCursor.getColumnIndex("priority"); int priority = dataCursor.getInt(description_index); holder.text1.setText(task_title); holder.text2.setText(task_day); if(priority==1) holder.img.setImageResource(R.drawable.redbutton); else if(priority==2) holder.img.setImageResource(R.drawable.bluebutton); else if(priority==3)holder.img.setImageResource(R.drawable.greenbutton); else holder.img.setImageResource(R.drawable.redbuttonchecked); return convertView; } static class ViewHolder { TextView text1; TextView text2; ImageView img; } } </code></pre> <p><strong>Google Results so far :</strong></p> <p><a href="https://github.com/commonsguy/cwac-merge" rel="nofollow noreferrer">MergeAdapter</a></p> <p><a href="http://jsharkey.org/blog/2008/08/18/separating-lists-with-headers-in-android-09/" rel="nofollow noreferrer">Jeff Sharkey</a></p> <p><a href="http://code.google.com/p/android-amazing-listview/" rel="nofollow noreferrer">Amazing ListView</a></p> <p><a href="https://stackoverflow.com/questions/3841078/section-header-in-listview-not-show-correctly">SO Question</a></p> <p><strong>Problem :</strong> I want to display listview with Date as section headers. Ofcourse Date values come from sqlite database.</p> <p>Can anyone please guide me how can i achieve this task.</p> <p>Or Provide me a Sample Code or Exact(like) Code related to the same.</p> <p><strong>Edited</strong> According to Graham Borald's Answer (This works fine. However it was a quick fix.)</p> <pre class="lang-java prettyprint-override"><code>public class DomainAdapter extends SimpleCursorAdapter{ private Cursor dataCursor; private LayoutInflater mInflater; public DomainAdapter(Context context, int layout, Cursor dataCursor, String[] from, int[] to) { super(context, layout, dataCursor, from, to); this.dataCursor = dataCursor; mInflater = LayoutInflater.from(context); } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView = mInflater.inflate(R.layout.tasks_row, null); holder = new ViewHolder(); holder.text1 = (TextView) convertView.findViewById(R.id.label);//Task Title holder.text2 = (TextView) convertView.findViewById(R.id.label2);//Task Date holder.img = (ImageView) convertView.findViewById(R.id.taskImage); holder.sec_hr=(TextView) convertView.findViewById(R.id.sec_header); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } dataCursor.moveToPosition(position); int title = dataCursor.getColumnIndex("title"); String task_title = dataCursor.getString(title); int title_date = dataCursor.getColumnIndex("due_date"); String task_day = dataCursor.getString(title_date); int description_index = dataCursor.getColumnIndex("priority"); int priority = dataCursor.getInt(description_index); String prevDate = null; if (dataCursor.getPosition() &gt; 0 &amp;&amp; dataCursor.moveToPrevious()) { prevDate = dataCursor.getString(title_date); dataCursor.moveToNext(); } if(task_day.equals(prevDate)) { holder.sec_hr.setVisibility(View.GONE); } else { holder.sec_hr.setText(task_day); holder.sec_hr.setVisibility(View.VISIBLE); } holder.text1.setText(task_title); holder.text2.setText(task_day); if(priority==1) holder.img.setImageResource(R.drawable.redbutton); else if(priority==2) holder.img.setImageResource(R.drawable.bluebutton); else if(priority==3)holder.img.setImageResource(R.drawable.greenbutton); else holder.img.setImageResource(R.drawable.redbuttonchecked); return convertView; } static class ViewHolder { TextView text1; TextView text2; TextView sec_hr; ImageView img; } } </code></pre> <p><strong>Edited</strong> According to CommonsWare's Answer</p> <pre class="lang-java prettyprint-override"><code>public class DomainAdapter extends SimpleCursorAdapter{ private Cursor dataCursor; private TodoDbAdapter adapter; private LayoutInflater mInflater; boolean header; String last_day; public DomainAdapter(Context context, int layout, Cursor dataCursor, String[] from, int[] to) { super(context, layout, dataCursor, from, to); this.dataCursor = dataCursor; mInflater = LayoutInflater.from(context); header=true; adapter=new TodoDbAdapter(context); } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; TitleHolder title_holder = null; if(getItemViewType(position)==1) { //convertView= mInflater.inflate(R.layout.todo_row, parent, false); if (convertView == null) { convertView = mInflater.inflate(R.layout.todo_row, null); holder = new ViewHolder(); holder.text1 = (TextView) convertView.findViewById(R.id.label);//Task Title holder.text2 = (TextView) convertView.findViewById(R.id.label2);//Task Date holder.img = (ImageView) convertView.findViewById(R.id.task_icon); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } dataCursor.moveToPosition(position); int title = dataCursor.getColumnIndex("title"); String task_title = dataCursor.getString(title); int title_date = dataCursor.getColumnIndex("day"); String task_day = dataCursor.getString(title_date); int description_index = dataCursor.getColumnIndex("priority"); int priority = dataCursor.getInt(description_index); holder.text1.setText(task_title); holder.text2.setText(task_day); if(priority==1) holder.img.setImageResource(R.drawable.redbutton); else if(priority==2) holder.img.setImageResource(R.drawable.bluebutton); else if(priority==3)holder.img.setImageResource(R.drawable.greenbutton); else holder.img.setImageResource(R.drawable.redbuttonchecked); } else { if (convertView == null) { convertView = mInflater.inflate(R.layout.section_header, null); title_holder = new TitleHolder(); title_holder.datee = (TextView) convertView.findViewById(R.id.sec_header);//Task Title convertView.setTag(title_holder); } else { title_holder = (TitleHolder) convertView.getTag(); } dataCursor.moveToPosition(position); int title_date = dataCursor.getColumnIndex("day"); String task_day = dataCursor.getString(title_date); title_holder.datee.setText(task_day); } return convertView; } static class ViewHolder { TextView text1; TextView text2; ImageView img; } static class TitleHolder{ TextView datee; } @Override public int getCount() { return dataCursor.getCount()+1; //just for testing i took no. of headers=1 } @Override public int getViewTypeCount() { return 2; } @Override public int getItemViewType(int position) { dataCursor.moveToPosition(position); **Long id=dataCursor.getLong(position);** Cursor date=adapter.fetchTodo(id); int title_date = date.getColumnIndex("day"); String task_day = date.getString(title_date); Log.i("tag",task_day); if(last_day.equals(task_day)) return 1;//Display Actual Row else { last_day=task_day;//Displaying Header return 0; } } /* @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { final View view; if(getItemViewType(cursor.getPosition())==1) view= mInflater.inflate(R.layout.todo_row, parent, false); else view=mInflater.inflate(R.layout.section_header,parent, false); return view; } @Override public void bindView(View convertView, Context context, Cursor cursor) { long id = cursor.getPosition(); }*/ } </code></pre> <p>I am getting <em>Null Pointer Exception</em> at line : <code>Cursor date=adapter.fetchTodo(id);</code> Seems that Cursor is not getting any data.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload