ANdroid: динамически добавлять кнопки изображений в строки в макете таблицы - PullRequest
0 голосов
/ 20 февраля 2012

Мне нужно добавить количество строк в макет таблицы и в каждую строку мне нужно добавить две кнопки изображения.Количество строк может быть разным при каждом запуске Activity - я просматриваю базу данных SQLite и для каждой строки в базе данных мне нужно добавить кнопку Image.И будет две кнопки изображения в каждом ряду макета таблицы.Пока у меня есть этот код:

db.open();
    int count = db.getCount();
    boolean newRow = true;
    for (int i = 0; i < count; i++) {
        if (newRow == true) {
            newRow = false;
            row = new TableRow(this);
            row.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,     LayoutParams.WRAP_CONTENT));
        }
        ImageButton button = new ImageButton(this);
        row.addView(button);
        tableLayout.addView(row);
    }
    db.close();

Строка TableRow определена над этим блоком кода просто как переменная для этого Activity.Макет моей таблицы (tableLayout в коде) определен в XML-коде макета Activity:

<TableLayout
    android:id="@+id/tableLayoutContacts"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >


</TableLayout> 

Код падает на линии

tableLayout.addView(row);

Я не былв состоянии решить это.Есть идеи?Спасибо !!

1 Ответ

0 голосов
/ 20 февраля 2012

Я думаю, что проблема в другом

Кажется, что в вашем коде будет только одна строка, и вы снова и снова добавляете эту строку в tableLayout, как показано ниже.

tableLayout.addView(row);

Это приведет к исключению IllegalStateException в функции addViewInner для ViewGroup

попробуйте это

db.open();
    int count = db.getCount();
    boolean newRow = false;
    for (int i = 0; i < count; i++) {
        if (i % 2 == 0)
            newRow = true;
        if (newRow == true) {
            newRow = false;
            row = new TableRow(this);
            row.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,     LayoutParams.WRAP_CONTENT));
            tableLayout.addView(row);
        }
        ImageButton button = new ImageButton(this);
        row.addView(button);

    }
    db.close();
...