Как я могу добавить строки таблицы в таблицу программно?
Я пытаюсь добавить пользовательский класс, который расширяет строку таблицы в таблицу.
Это пользовательский класс: package com.thegame.lunchilicious;
import android.content.Context;
import android.text.InputType;
import android.util.AttributeSet;
import android.widget.EditText;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
public class OrderRow extends TableRow {
protected int num;
protected TextView name;
protected TextView cal;
protected TextView price;
protected EditText quantity;
protected int calories;
protected int cost;
public OrderRow(Context context, Item item) {
super(context);
this.name = new TextView(context);
this.cal = new TextView(context);
this.price = new TextView(context);
this.quantity = new EditText(context);
this.setLayoutParams(new TableLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
this.num = item.getId();
this.calories = item.getCalories();
this.cost = item.getCost();
this.name.setText(item.getName());
this.cal.setText(item.getCalories() + "");
this.price.setText(item.getCost() + "");
name.setLayoutParams(new TableLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 4f));
cal.setLayoutParams(new TableLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 1f));
price.setLayoutParams(new TableLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 1f));
quantity.setLayoutParams(new TableLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 1f));
name.setTag("name" + num);
cal.setTag("cal" + num);
price.setTag("price" + num);
quantity.setTag("quantity" + num);
quantity.setInputType(InputType.TYPE_NUMBER_VARIATION_NORMAL);
this.addView(name);
this.addView(cal);
this.addView(price);
this.addView(quantity);
}
public OrderRow(Context context) {
super(context);
}
public OrderRow(Context context, AttributeSet attrs) {
super(context, attrs);
}
}
Это часть моего onCreateView:
TableLayout table = (TableLayout) myView.findViewById(R.id.table);
List<OrderRow> rows = new ArrayList<OrderRow>();
for (Item item : items) {
row = new OrderRow(parentActivity, item);
rows.add(row);
table.addView(row);
}
Ни одна из строк таблицы не отображается, но отображается все содержимое в представлении xml.
1 ответ
Решение
Для представлений в вашем TableRow вам нужно использовать TableRow.LayoutParams
вместо TableLayout.LayoutParams
, Вот так:
name.setLayoutParams(new TableRow.LayoutParams(
TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT, 4f));
cal.setLayoutParams(new TableRow.LayoutParams(
TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT, 1f));
price.setLayoutParams(new TableRow.LayoutParams(
TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT, 1f));
quantity.setLayoutParams(new TableRow.LayoutParams(
TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT, 1f));