проблема в расширении списка - PullRequest
1 голос
/ 13 сентября 2011

Я пытаюсь создать расширяемый список с помощью SimpleCursorTreeAdapter, но мой список не создает группы, он повторяет каждый дочерний элемент как элемент группы.

Мои данные сформированы как KEY_ROWID, KEY_NAME, KEY_EMAIL, KEY_ILID, KEY_KURUMIDKEY_BOLGEID


мои данные:

(db,"Asli", "asli@gmail.com", 1, 1, 1); 
(db,"Osman Can", "osman@gmail.com", 1, 1, 1); 
(db,"Abuzer Kadayif", "kadayif@gmail.com", 1, 2, 1); 

(db,"Emre", "emre@gmail.com", 1, 3, 2); 
(db,"Deniz", "deniz@gmail.com", 1, 4, 2); 

(db,"Simon Garfunkel", "simon@gmail.com", 1, 5, 0); 
(db,"Eric Clapton", "eric@gmail.com", 1, 6, 0); 
(db,"Neil Young", "neil@gmail.com", 1, 5, 0); 

И это мой код:

String sqlString = "SELECT * " + " FROM " + Items.DATABASE_TABLE;

        Cursor mCursor = db.rawQuery(sqlString, null);

        SimpleCursorTreeAdapter mAdapter = new SimpleCursorTreeAdapter(this,
                mCursor, R.layout.row, R.layout.exprow,
                //createGroupList(), 
                new String[] { Items.KEY_BOLGEID },
                new int[] { R.id.txtItem },
                R.layout.exprow, R.layout.exprow,
                new String[] { Items.KEY_EMAIL,Items.KEY_NAME }, new int[] { R.id.dscItem, R.id.manuItem }) {

            @Override
            protected Cursor getChildrenCursor(Cursor groupCursor) {

                String tempGroup = groupCursor.getString(groupCursor
                        .getColumnIndex(Items.KEY_BOLGEID));

                DbHelper dbh = new DbHelper(BrowseActivity.this);
                SQLiteDatabase db = dbh.getWritableDatabase();

                String sqlString = "SELECT " + Items.KEY_ROWID + ", "
                        + Items.KEY_EMAIL + ", " + Items.KEY_NAME + ", "
                        + Items.KEY_KURUMID + ", " + Items.KEY_BOLGEID + ", "
                        + Items.KEY_ILID + " FROM " + Items.DATABASE_TABLE
                        + " WHERE " + Items.KEY_BOLGEID + "= "  + tempGroup 
                        ;
                Cursor mCursor = db.rawQuery(sqlString, null);

                return mCursor;

            }


        };

        browseView.setAdapter(mAdapter);

    }

Мой результат должен быть:

Group 1:
(db,"Asli", "asli@gmail.com", 1, 1, 1); 
(db,"Osman Can", "osman@gmail.com", 1, 1, 1); 
(db,"Abuzer Kadayif", "kadayif@gmail.com", 1, 2, 1); 
Group 2:        
(db,"Emre", "emre@gmail.com", 1, 3, 2); 
(db,"Deniz", "deniz@gmail.com", 1, 4, 2); 
Group 3:        
(db,"Simon Garfunkel", "simon@gmail.com", 1, 5, 0); 
(db,"Eric Clapton", "eric@gmail.com", 1, 6, 0); 
(db,"Neil Young", "neil@gmail.com", 1, 5, 0);

Но это 3 раза, группа 1, 2 раза, группа 2, 3 раза, группа 0

И я попытался изменить sql groupCursor, но он вылетает.

1 Ответ

0 голосов
/ 20 марта 2012

Вам нужно изменить свой первый оператор SQL, чтобы он возвращал нужные вам группы только один раз. Прямо сейчас вы получаете его для каждой записи, поэтому адаптер дает вам группу для каждой записи. Измените ваш SQL на:

String sqlString = SELECT DISTINCT " + Items.KEY_BOLGEID + " AS _id FROM " + Items.DATABASE_TABLE;

Это даст вам один экземпляр каждого элемента, который вы хотите сгруппировать (и установите для него столбец _id, необходимый для адаптера).

Затем просто используйте new String[] { _id } в групповой части вызова адаптера.

...