Android TableRow – как динамически добавить представление к определенной позиции?

Я создаю TableLayout динамически. И мне нужно, чтобы у TableRow был пробел в определенной позиции столбца.

Например, мне нужна строка с ImageView на 3 и 5 позициях, следующая строка имеет ImageView на 1, 2, 4 позициях. Я пытаюсь использовать:

   TableRow row1 = new TableRow(this);  
   row1.addView(new ImageView(this), 2);  
   row1.addView(new ImageView(this), 4);  
   mTable.addView(row1);
   TableRow row2 = new TableRow(this);  
   row2.addView(new ImageView(this), 0);  
   row2.addView(new ImageView(this), 1);  
   row2.addView(new ImageView(this), 3);
   mTable.addView(row2);

но я получил IndexOfBoundException во время выполнения.
ОШИБКА/AndroidRuntime(771): Причина: java.lang.IndexOutOfBoundsException: index=2 count=0

Будем признательны за любые предложения.
Спасибо.


person levkatata    schedule 27.07.2010    source источник


Ответы (1)


На самом деле ошибка кажется вполне логичной на первый взгляд в вашем коде. Если ваша таблица не создана из xml и не содержит требуемого количества строк, при добавлении представления в индексе 2 этот индекс не существует. Попробуйте заменить эти 2 на 0, вы увидите, что это работает. Поэтому вам просто нужно добавить пустой ImageView к другим индексам, если вы хотите придерживаться своего.

person Sephy    schedule 27.07.2010
comment
Сергий, спасибо за ответ. Но, может быть, вы знаете, как указать количество столбцов в строке? Или количество строк и столбцов в таблице? Я просто хотел использовать addView(view, index) без такой ошибки... - person levkatata; 27.07.2010
comment
Если я вас правильно понял, вы хотите, чтобы изображения были в ячейке, потом нет в следующей, потом одно изображение, потом нет, ... а потом в следующей строке наоборот, начиная с пустой ячейки? - person Sephy; 27.07.2010
comment
Да, Сережа, ты прав. Но мне нужно создать несколько таких макетов, например, ромб, крест, галочку и так далее. Я попробовал ваше решение, оно отлично работает! Но я заметил, что время создания такого макета увеличивается в зависимости от количества создаваемых просмотров. Мне нужно создать много пустых представлений... - person levkatata; 27.07.2010
comment
в этом случае, может быть, попробовать использовать GridView? это даст вам сетку, и вы можете определить количество строк/столбцов - person Sephy; 27.07.2010
comment
На самом деле GridView не поддерживает операцию addView для определенной позиции. Но все равно спасибо) - person levkatata; 28.07.2010