Использование mergeAdapter из commonsware / cwac-merge в viewpager - PullRequest
3 голосов
/ 30 января 2012

Я пытаюсь создать представление списка в пейджере представлений, используя 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));
        }
    }
...