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

編集:

同じ問題を抱えた他の 2 つのスレッドで、次の解決策を見つけました。

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.LayoutParamsLayoutParams

-> ビュー/要素が 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 に答える