Android: динамическое добавление кнопок изображения в строки в макете таблицы

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

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. Макет My Table (tableLayout в коде) определяется в XML-коде макета Activity:

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


</TableLayout> 

Код вылетает на строке

tableLayout.addView(row);

Я не смог решить это. Любые идеи? Спасибо!!


person Tomáš 'Guns Blazing' Frček    schedule 20.02.2012    source источник
comment
Как вы назначаете свой TableLayout в коде Java?   -  person Victor Wong    schedule 20.02.2012
comment
tableLayout = (TableLayout) findViewById(R.id.tableLayoutContacts);   -  person Tomáš 'Guns Blazing' Frček    schedule 20.02.2012
comment
Ну, в моем LogCat около 30 ошибок (красные линии). Он начинается с синей строки, закрывающей виртуальную машину, затем оранжевого threadid=1: поток завершается с необработанным исключением (группа=0x40015560), а затем следует красная строка, начинающаяся с FATAL EXCEPTION: main   -  person Tomáš 'Guns Blazing' Frček    schedule 20.02.2012


Ответы (1)


думаю проблема в другом

Кажется, что ваш код будет иметь только одну строку, и вы снова и снова добавляете эту строку в 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();
person Vivek Khandelwal    schedule 20.02.2012
comment
Вау, я этого совершенно не видел... но теперь это работает, большое спасибо! :) Но, похоже, есть еще одна небольшая проблема... Я предположил, что добавление новой строки добавит ее ниже предыдущей. Но теперь у меня все кнопки в одном ряду (по крайней мере оптически)... какой-нибудь намек? Спасибо! :) - person Tomáš 'Guns Blazing' Frček; 20.02.2012
comment
Попробуйте отредактированный ответ для двух кнопок подряд - person Vivek Khandelwal; 20.02.2012