Это сбой, потому что TableRow
уже находится в макете. Если вы хотите добавить некоторые динамически, вы должны создать их программно, то есть:
// PSEUDOCODE
TableRow newRow = new TableRow(this);
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(/*....*/);
newRow.setLayoutParams(lp);
relLayout.add(newRow);
На самом деле TableRow
следует использовать внутри TableLayout
.
Если вы хотите использовать что-то более одного раза, вы можете использовать технику наддува. Вам нужно создать макет xml, который включает единственную часть, которую вы хотите повторить (таким образом, ваш TableRow
и его дочерние элементы), а затем:
LayoutInflater inflater =
(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View inflated = inflater.inflate(R.layout.your_layout, null);
Теперь inflated
содержит указанную вами раскладку. Вместо null
вы можете разместить макет, к которому прикрепите надутый. Каждый раз, когда вам нужен такой новый элемент, вы должны будете раздувать его одинаково.
(Вы всегда должны сообщать об ошибке, получаемой при сбое)
------ РЕДАКТИРОВАТЬ -----
хорошо, теперь я вижу, это ваш код:
RelativeLayout RLayout = (RelativeLayout)findViewById(R.id.RelativeLayout);
TableRow tableRow = (TableRow)findViewById(R.id.TableRow);
for(int i = 1; i <4; i++) {
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View inflated = inflater.inflate(R.layout.main, tableRow);
}
таким образом вы надуваете весь макет внутри оригинального TableRow.
Вы должны иметь макет row.xml
, подобный этому, вместе с main.xml
:
<?xml version="1.0" encoding="utf-8"?>
<TableRow xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/TableRow"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
>
<TextView
android:id="@+id/Text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Text"
/>
</TableRow>
и затем надуйте это так:
RelativeLayout RLayout = (RelativeLayout)findViewById(R.id.RelativeLayout);
for(int i = 1; i <4; i++) {
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.row, RLayout);
}
посмотрите, работает ли оно.