向表中动态添加的行不可见

时间:2013-01-30 14:13:51

标签: android android-widget

我正在尝试以编程方式向我的TableLayout添加一行。但它不可见。

这是我的代码:

// Get the TableLayout
    TableLayout tl = (TableLayout) getActivity().findViewById(R.id.table_child_data_01);

    TableRow tr = new TableRow(getActivity());
    tr.setId(100);
    tr.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT));

    // Create a TextView to house the name of the province
    TextView labelTV = new TextView(getActivity());
    labelTV.setId(200);
    labelTV.setText("DynamicTV");
    labelTV.setTextColor(Color.BLACK);
    labelTV.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
    tr.addView(labelTV);

    // Create a TextView to house the value of the after-tax income
    TextView valueTV = new TextView(getActivity());
    valueTV.setId(300);
    valueTV.setText("$0");
    valueTV.setTextColor(Color.BLACK);
    valueTV.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
    tr.addView(valueTV);

    // Create a TextView to house the value of the after-tax income
    TextView valueTV2 = new TextView(getActivity());
    valueTV2.setId(400);
    valueTV2.setText("00");
    valueTV2.setTextColor(Color.BLACK);
    valueTV2.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
    tr.addView(valueTV2);

    // Add the TableRow to the TableLayout
    tl.addView(tr, new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));

    Utilities.ShowToastMsg(getActivity(), "Row added");

我错过了什么吗?

我使用的是getActivity()而不是this,因为上面的代码位于Fragment内,而不是Activity。

编辑:

在另外两个遇到同样问题的线程中,我找到了以下解决方案:

使用import TableRow.LayoutParams.MATCH_PARENT;代替import android.view.ViewGroup.LayoutParams;

在为TableRow tr设置布局参数时使用TableRow.LayoutParams.MATCH_PARENT代替LayoutParams.MATCH_PARENT

但以上都没有为我工作。

1 个答案:

答案 0 :(得分:0)

设置LayoutParams时。你必须牢记这一点:

- >如果要设置LayoutParams的视图/元素提供LayoutParams,请使用它们。例如,TableRow提供了LayoutParams(TableRow.LayoutParams),因此在设置TableRow的LayoutParams时,我们需要专门使用TableRow.LayoutParams而不是LayoutParams或其他任何内容。

- >如果视图/元素不提供LayoutParams本身,请使用的是LayoutParams 提供LayoutParams的直接父级。例如,在上面的代码中TextView没有提供LayoutParams。所以我需要看到它的直接父级,即TableRow(它是否提供LayoutParams?是的。使用它!)

所以,在上面的代码中:

tr.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT));

会变成:

TableRow.LayoutParams params = new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT);
tr.setLayoutParams(params);

此:

labelTV.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));

会变成这样:

TableRow.LayoutParams paramsTVh = new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT);
labelTV.setLayoutParams( paramsTVh );

这一改变对我有用。希望这对某人有用。