我有一个ReserveNodesFragment,我在其中创建动态checkBoxes。 我已经全局声明了orbitCheckBoxes,因为另一个片段也应该访问它们。
我在GlobalData.java中全局声明了checkBoxes:
public class GlobalData extends Application{
...
...
public ArrayList<CheckBox> orbitCheckBoxes = new ArrayList<CheckBox>();
//Accessor and methods for orbit checkboxes
public ArrayList<CheckBox> getOrbitCheckBoxes() {
return this.orbitCheckBoxes;
}
public void setOrbitCheckBoxes(CheckBox checkbox) {
this.orbitCheckBoxes.add(checkbox);
}
public void setOrbitCheckBoxesText(int i, String text){
this.orbitCheckBoxes.get(i).setText(text);
}
public void clearOrbitCheckBoxes(){
this.orbitCheckBoxes.clear();
}
}
动态创建CheckBoxes的片段如下:
public class ReserveNodesFragment extends Fragment {
GlobalData appState;
LinearLayout reserveNodesView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
reserveNodesView = (LinearLayout)inflater.inflate(R.layout.reserve_nodes_fragment, container, false);
appState = ((GlobalData)getActivity().getApplicationContext());
setCheckBoxes();
return reserveNodesView;
}
public void setCheckBoxes(){
LinearLayout ll =
(LinearLayout)reserveNodesView.findViewById(R.id.child_scrollView);
for(int i = 0; i < appState.getOrbitAvailableNodes().size(); i++){
String node_name = appState.getOrbitAvailableNodes().get(i).toString();
appState.setOrbitCheckBoxes(new CheckBox(reserveNodesView.getContext()));
appState.setOrbitCheckBoxesText(i, node_name);
ll.addView(appState.getOrbitCheckBoxes().get(i));
}
}
运行我的应用程序时出现以下错误: 致命的例外:主要 07-31 06:06:39.948:E / AndroidRuntime(779):java.lang.IllegalStateException:指定的子节点已经有父节点。您必须先在孩子的父母身上调用removeView()。
答案 0 :(得分:0)
我相信你应该在ll.addView:
之前调用它Checkbox cb = appState.getOrbitCheckBoxes().get(i):
((ViewGroup)cb.getParent()).removeView(cb);
先从父母那里删除它。
或者只是这可以工作,因为你绑定到构造函数中的reserveNodesView:
reserveNodesView.removeView(appState.getOrbitCheckBoxes().get(i));