Android 加入&;将行删除到片段中的TableLayout

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.

我在基于所选项目添加/删除表单元素时遇到问题

下面是我的listener类中rtSpinner元素的内容:

     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。是的,我意识到很难添加已经存在的东西。是的,也许我误读了你的代码。您是在尝试向表中添加新行,还是将它们从其他位置移到表中?