Отличительные значения в Android ExpandableListView - PullRequest
0 голосов
/ 27 сентября 2010

У меня проблемы с ExpandableListView.Я хочу, чтобы каждая группа была из столбца «связь», которая не является уникальной, но я хочу, чтобы группы были уникальными (т. Е. Каждое значение «связи» должно иметь только одну группу).Каждое значение в группе имеет данные в других столбцах, которые должны отображаться.Проблема в том, что мне кажется, что я могу либо использовать оператор SQL DISTINCT с одним столбцом (а затем getChildrenCursor () генерирует исключение IllegalStateException), либо не использовать оператор DISTINCT и дублировать каждую группу.

Может кто-нибудь предложитьисправить это?

public void onCreate(Bundle saved) {

    super.onCreate(saved);

    DatabaseHelper dh = new DatabaseHelper(this);
    dh.openDataBase();
    db = dh.getReadableDatabase();

    String query = "SELECT DISTINCT bond FROM spectro";

    Cursor c = db.rawQuery(query, null); //throws exception when group opened
    //Cursor c = db.query("spectro", new String[] { "_id", "name", "bond", ir },
        //null, null, null, null, null) - gives duplicate groups

    ExpandableListAdapter a = new IRCursorAdapter (this,
            c, android.R.layout.simple_expandable_list_item_1, new String[] { "bond" },
            new int[] { android.R.id.text1 }, R.layout.row_doubleend,
            new String[] { "name", "ir" }, new int[] { R.id.double_item1, R.id.double_item2 });

    this.setListAdapter(a);


}

protected class IRCursorAdapter extends SimpleCursorTreeAdapter {

    public IRCursorAdapter(Context context, Cursor cursor, int groupLayout,
            String[] groupFrom, int[] groupTo, int childLayout,
            String[] childFrom, int[] childTo) {
        super(context, cursor, groupLayout, groupFrom, groupTo, childLayout, childFrom,
                childTo);
    }

    @Override
    protected Cursor getChildrenCursor(Cursor groupCursor) {

        Cursor c = db.query("spectro", new String[] {"_id", "name", "bond", "ir"},
                "bond=?", new String[] { groupCursor.getString(0) }, null, null, null);

        startManagingCursor(c);
        return c;
    }


};

вот как выглядит мой стол - связь - это то, что я хочу быть уникальным:

_id |имя |связь |ир
1 |имя 1 |связь 1 |ИК 1
2 |имя 2 |связь 1 |ИК 2
3 |имя 3 |связь 2 |ИК 3
4 |имя 4 |связь 3 |ir 4

извините, если это не совсем понятно, но спасибо за вашу помощь!

1 Ответ

0 голосов
/ 30 ноября 2010

Я думаю, вы неправильно используете отдельный оператор.ЭТО вернет только Bond1, Bond2, Bond3 и все.Вам нужно создать составной оператор соединения, чтобы создать правильный курсор.То, что у вас там, всегда выдает ошибку, потому что вы не указали правильно детей.Во-вторых, я бы использовал запрос (вместо необработанного запроса) и указывал там параметры.

Например, db.query (true, "spectro", new String [] {"bond"}, null, null ,...)

Вам также нужно убедиться, что у вас есть параметры Group From -> To и Children From -> to корректные параметры!

...