我正在尝试以编程方式向我的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
。
但以上都没有为我工作。
答案 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 );
这一改变对我有用。希望这对某人有用。