全局,动态复选框android

时间:2014-07-31 10:57:38

标签: android android-fragments checkbox

我有一个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()。

1 个答案:

答案 0 :(得分:0)

我相信你应该在ll.addView:

之前调用它
Checkbox cb = appState.getOrbitCheckBoxes().get(i):
((ViewGroup)cb.getParent()).removeView(cb);

先从父母那里删除它。

或者只是这可以工作,因为你绑定到构造函数中的reserveNodesView:

reserveNodesView.removeView(appState.getOrbitCheckBoxes().get(i));