Android 加入&;将行删除到片段中的TableLayout
我在基于所选项目添加/删除表单元素时遇到问题 下面是我的listener类中rtSpinner元素的内容:Android 加入&;将行删除到片段中的TableLayout,android,android-fragments,android-tablelayout,Android,Android Fragments,Android Tablelayout,我在基于所选项目添加/删除表单元素时遇到问题 下面是我的listener类中rtSpinner元素的内容: selectedRamp = rtSpinner.getSelectedItemPosition(); rampImage = (ImageView) getActivity().findViewById(R.id.rampImageView); dimTable = (TableLayout) getActivity().findViewById(R.id.
selectedRamp = rtSpinner.getSelectedItemPosition();
rampImage = (ImageView) getActivity().findViewById(R.id.rampImageView);
dimTable = (TableLayout) getActivity().findViewById(R.id.dimTable);
switch (selectedRamp)
{
case 0: // one ramp, one crossing
rampImage.setImageResource(R.drawable.oneramponecross);
rampDimYY = (EditText) getActivity().findViewById(R.id.rampDimYY);
rampDimZZ = (EditText) getActivity().findViewById(R.id.rampDimZZ);
rowYY = (TableRow) getActivity().findViewById(R.id.tableRowYY);
rowZZ = (TableRow) getActivity().findViewById(R.id.tableRowZZ);
rowYY.addView(rampDimYY);
rowZZ.addView(rampDimZZ);
dimTable.addView(rowYY);
dimTable.addView(rowZZ);
break;
如您所见,dimTable是TableLayout,每个维度都有自己的TableRow,我将在选择特定项后尝试添加它。当我打开特定片段时出现错误,以下是日志:
09-08 09:40:53.107 2944-2944/com.josh.cs_4401app E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.josh.cs_4401app, PID: 2944
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
at android.view.ViewGroup.addViewInner(ViewGroup.java:3562)
at android.view.ViewGroup.addView(ViewGroup.java:3415)
at android.view.ViewGroup.addView(ViewGroup.java:3360)
at android.view.ViewGroup.addView(ViewGroup.java:3336)
at com.josh.cs_4401app.RampTypeChooserFragment$1.onItemSelected(RampTypeChooserFragment.java:92)
at android.widget.AdapterView.fireOnSelected(AdapterView.java:893)
at android.widget.AdapterView.access$200(AdapterView.java:48)
at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:861)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
我可以看到addView在第92行(dimTable.addView(rowYY);)有一个错误,但我不确定如何解释/修复它
到目前为止,我已经引用了和,但我觉得它们可能不太适合片段使用
编辑:
好吧,我发现了我的问题。我试图将字段设置为XML布局中定义的预先存在的字段,但它们必须在fragment类中创建。我删除了XML内容,并将我的类更改为以下内容:
selectedRamp = rtSpinner.getSelectedItemPosition();
rampImage = (ImageView) getActivity().findViewById(R.id.rampImageView);
dimTable = (TableLayout) getActivity().findViewById(R.id.dimTable);
switch (selectedRamp)
{
case 0: // one ramp, one crossing
rampImage.setImageResource(R.drawable.oneramponecross);
TextView rowYYview = new TextView(getActivity());
TextView rowZZview = new TextView(getActivity());
rowYYview.setText("YY: ");
rowZZview.setText("ZZ: ");
rowYYview.setTextSize(20);
rowZZview.setTextSize(20);
EditText rampDimYY = new EditText(getActivity());
EditText rampDimZZ = new EditText(getActivity());
TableRow rowYY = new TableRow(getActivity());
TableRow rowZZ = new TableRow(getActivity());
rowYY.addView(rampDimYY);
rowYY.addView(rowYYview);
rowZZ.addView(rampDimZZ);
rowZZ.addView(rowZZview);
dimTable.addView(rowYY);
dimTable.addView(rowZZ);
break;
您没有创建任何新视图,而是使用
findviewbyd()
获取对它们的引用,因此它们已经存在并具有父视图。用new
实例化新视图,或膨胀现有布局以添加到表中。@MikeM。是的,我意识到很难添加已经存在的东西。是的,也许我误读了你的代码。您是在尝试向表中添加新行,还是将它们从其他位置移到表中?