Я пытаюсь создать представление списка в пейджере представлений, используя mergeAdapter. Поэтому в основном я хочу получить некоторые даты из моей базы данных и сохранить те же даты в некоторой группе (с каким-то заголовком) ,
поэтому я создаю Arraylist курсоров, который будет хранить данные, соответствующие уникальным датам, а затем попытаться объединить их с помощью адаптера слияния.
однако список не создается должным образом. вместо этого он показывает промежутки между двумя датами, и в макете нет содержимого. только заголовок и пробелы. Более того, даты не группируются в уникальную дату.
dbObj - это мой объект базы данных, который содержит таблицы.
Databases dbObj; // my database class
SQLiteDatabase ourDatabase;
ArrayList<SimpleCursorAdapter> alladapters;
ArrayList<Cursor> incomeCursor;
MergeAdapter listAdapter;
здесь надувается вид внутри ViewPager.
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;
это мои методы getdates и buildadapters
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
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));
}
}