0

我正在尝试以编程方式向我的 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

但以上都不适合我。

4

1 回答 1

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 );

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

于 2013-02-01T17:33:36.547 回答