I am trying to create a list view in a view pager using a mergeAdapter.So basically what i want is to fetch some dates from my database and and keeping the same dates in a sort of group (with some sort of header ).
so i am creating a Arraylist of cursors which will store data corresponding to unique dates and then try to merging them using merge adapter.
however the list is not getting created properly. instead it shows gaps between the two date and there is no content in the layout. just the header and gaps .moreover the dates are not getting grouped into unique date.
dbObj is my database object which contains the tables.
Databases dbObj; // my database class
SQLiteDatabase ourDatabase;
ArrayList<SimpleCursorAdapter> alladapters;
ArrayList<Cursor> incomeCursor;
MergeAdapter listAdapter;
the view is inflated here inside the ViewPager here .
public Object instantiateItem(View collection, int position)
{
LayoutInflater inflater = (LayoutInflater) collection.getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = null;
switch (position)
{
case 0:
ListView daily = new ListView(getActivity()
.getApplicationContext());
dates.clear();
alladapters.clear();
listAdapter.notifyDataSetInvalidated();
getDates();
buildAdapters();
daily.setCacheColorHint(0);
dbObj.open();
ourDatabase = dbObj.getDatabase();
setMergeAdapter();
daily.setAdapter(listAdapter);
view = daily;
((ViewPager) collection).addView(view, 0);
dbObj.close();
break;
}
return view;
these are my getdates and buildadapters methods
private void getDates() throws SQLException
{
dbObj.open();
ourDatabase = dbObj.getDatabase();
String[] columns = { Databases.KEY_ROWID, Databases.KEY_DATE };
Cursor c = ourDatabase.query(true, Databases.DATABASE_TABLE_INCOME,
columns, null, null, null, null, Databases.KEY_DATE, null);
int i = 0;
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext())
{
dates.add(c.getString(c.getColumnIndex(Databases.KEY_DATE)));
i++;
}
dbObj.close();
}
private void buildAdapters() throws SQLException
{
dbObj.open();
ourDatabase = dbObj.getDatabase();
Cursor c;
String[] columns = { Databases.KEY_ROWID, Databases.KEY_DATE,
Databases.KEY_AMOUNT, Databases.KEY_CATEGORY,
Databases.KEY_DESCRIPTION };
// Log.d("Size of Date ", msg)
for (int i = 0; i < dates.size(); i++)
{
incomeCursor.add(ourDatabase.query(Databases.DATABASE_TABLE_INCOME,
columns, Databases.KEY_DATE + "=" + dates.get(i), null,
null, null, null));
alladapters.add(new SimpleCursorAdapter(getActivity()
.getApplicationContext(), R.layout.listlayout, incomeCursor
.get(i), new String[] { Databases.KEY_AMOUNT,
Databases.KEY_CATEGORY, Databases.KEY_DESCRIPTION },
new int[] { R.id.ListAmount, R.id.ListCategory,
R.id.ListDescript },
CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER));
}
dbObj.close();
}
setmerger adapter method
private void setMergeAdapter()
{
// TODO Auto-generated method stub
TextView tv = new TextView(getActivity().getApplicationContext());
for (int i = 0; i < alladapters.size(); i++)
{
tv.setText(dates.get(i));
listAdapter.addView(tv);
listAdapter.addAdapter(alladapters.get(i));
}
}