2014-01-21 3 views
0

У меня есть функция, которая перебирает список и возвращает элементы строки.Добавить дочерние представления в RelativeLayout программно

Я хочу добавить эти строки в пустой RelativeLayout один за другим, чтобы все строки отображались последовательно вертикально.

Но приведенный ниже код не работает.

void setRows(RelativeLayout rowContainer, ViewHolder viewHolder, 
    List<RowCollection> rowCollection) { 

    for (int i = 0; i < rowCollection.size(); i++) { 
     MyRow row = new MyRow(rowCollection.get(i)); 
     RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
       LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); 
     params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, row.getId()); 
     rowContainer.addView(row, params); 
    } 
} 

Отображается только последний элемент строки.

Я думаю, но не уверен, что строки перекрывают друг друга.

+0

что не так ??? – Blackbelt

+0

@blackbelt вопрос обновлен – reiley

+1

попробуйте добавить эти строки в линейный макет, я думаю, вы их увидите. – DroidDev

ответ

2

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

params.addRule(RelativeLayout.BELOW, iDFromPreviousView); 
+0

даже это не будет работать, так как вы устанавливаете строку над ней - самостоятельно –

+0

не работает мой друг. – reiley

+0

Да, я знаю ошибку: вам нужно сохранить идентификатор из предыдущей строки и установить его в params.addRule вместо идентификатора текущего представления. Но не для первого вида, так как нет предыдущего вида :-) – Thommy

2

изменение:

void setRows(RelativeLayout rowContainer, ViewHolder viewHolder, 
     List<RowCollection> rowCollection) { 
      MyRow lat_row=null; 
    for (int i = 0; i < rowCollection.size(); i++) { 
     MyRow row = new MyRow(rowCollection.get(i)); 
     RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
       LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); 
     if (i == 0) { 
      params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); 
     }else{ 

      //<---get the id of previous row not sure what RowCollection contains 
      params.addRule(RelativeLayout.ABOVE,lat_row.getId()); 
     } 
        lat_row=row; 
     rowContainer.addView(row, params); 
    } 
} 

это складывают все вид снизу вверх.

+0

nope, не работает – reiley

+0

попробуйте мое редактирование. также устанавливают id для строки внутри конструктора MyRow? –

Смежные вопросы