3
I have an expandable listview with checkboxes in group and child. 

그룹 체크 박스를 선택하면 모든 하위 항목이 선택되어야합니다. 하지만 프로그램을 실행할 때 null 포인터 예외가 발생합니다. MainActivity 항목에서확장 가능한 그룹보기 및 자식 체크 박스에서 null 포인터 예외가 발생하는 경우

import java.util.ArrayList; 

public class Group { 
    public String groupId; 
    public String groupName; 
    public ArrayList<Child> childrens; 
    public Group(String groupId, String groupName, 
      ArrayList<Child> childrens) { 
     super(); 
     this.groupId = groupId; 
     this.groupName = groupName; 
     this.childrens = childrens; 
    } 
    public String getGroupId() { 
     return groupId; 
    } 
    public void setGroupId(String groupId) { 
     this.groupId = groupId; 
    } 
    public String getGroupName() { 
     return groupName; 
    } 
    public void setGroupName(String groupName) { 
     this.groupName = groupName; 
    } 
    public ArrayList<Child> getChildrens() { 
     return childrens; 
    } 
    public void setChildrens(ArrayList<Child> childrens) { 
     this.childrens = childrens; 
    } 

} 

//Child.java: 

public class Child { 
    public String chiledId; 
    public String childName; 
    public Child(String chiledId, String childName) { 
     super(); 
     this.chiledId = chiledId; 
     this.childName = childName; 
    } 
    public String getChiledId() { 
     return chiledId; 
    } 
    public void setChiledId(String chiledId) { 
     this.chiledId = chiledId; 
    } 
    public String getChildName() { 
     return childName; 
    } 
    public void setChildName(String childName) { 
     this.childName = childName; 
    } 
} 

// 동적으로 추가됩니다 여기에 ...... 감사

//ExpandableListAdapter.java: 

import java.util.ArrayList; 
import java.util.HashMap; 
import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseExpandableListAdapter; 
import android.widget.CheckBox; 
import android.widget.TextView; 
import android.view.View.OnClickListener; 


public class ExpandableListAdapter extends BaseExpandableListAdapter { 

    LayoutInflater inflater; 

    /*list of group */ 
    private ArrayList<Group> groups; 
    private ArrayList<Boolean> isCheckedHeader=new ArrayList<Boolean>(); 
    private HashMap<String, ArrayList<Boolean>> IsCheckedChild; 


public ExpandableListAdapter(Context context,ArrayList<Group> groups,ArrayList<Boolean> isCheckedHeader,HashMap<String, ArrayList<Boolean>> IsCheckedChild) { 
    super(); 
     this.groups=groups; 
     this.isCheckedHeader=isCheckedHeader; 
     this.IsCheckedChild=IsCheckedChild; 
     inflater= (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 
    /** 
    * @param child 
    * @param group 
    * use for adding item to list view 
    */ 
    public void addItem(Child child,Group group) { 
     if(!groups.contains(group)) { 
      groups.add(group); 
     } 
     int index=groups.indexOf(group); 
     ArrayList<Child> ch=groups.get(index).getChildrens(); 
     ch.add(child); 
     groups.get(index).setChildrens(ch); 
    } 

    public Child getChild(int groupPosition, int childPosition) { 
     ArrayList<Child> ch=groups.get(groupPosition).getChildrens(); 

     return ch.get(childPosition); 
    } 

    public long getChildId(int groupPosition, int childPosition) { 
     return childPosition; 
    } 

    @Override 
    public int getChildrenCount(int groupPosition) { 
     ArrayList<Child> ch=groups.get(groupPosition).getChildrens(); 
     return ch.size(); 
    } 

    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, 
      View convertView, ViewGroup parent) { 
     Child child= (Child) getChild(groupPosition,childPosition); 
     TextView childName=null; 
     if(convertView==null) { 
      convertView=inflater.inflate(R.layout.child_view, null); 
     } 

     final CheckBox chkChild=(CheckBox)convertView.findViewById(R.id.checkBoxC); 
     childName=(TextView) convertView.findViewById(R.id.textViewChildName); 
     childName.setText(child.getChildName()); 
     chkChild.setChecked(IsCheckedChild.get(this.groups.get(groupPosition)).get(childPosition)); 

     final int iGroupPos = groupPosition; 
     final int iChildPos = childPosition; 

     chkChild.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       if(chkChild.isChecked()) //the child was enable (checked) 
       { 
        IsCheckedChild.get(groups.get(iGroupPos)).set(iChildPos, true); 
       } 
       else //the child was disable (non-checked) 
       { 
        IsCheckedChild.get(groups.get(iGroupPos)).set(iChildPos, false); 
       } 
      } 
     }); 

     return convertView; 
    } 
    public Group getGroup(int groupPosition) { 
     return groups.get(groupPosition); 
    } 

    public int getGroupCount() { 
     return groups.size(); 
    } 

    public long getGroupId(int groupPosition) { 
     return groupPosition; 
    } 

    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, 
      ViewGroup parent) { 
     TextView groupName = null; 
     Group group=(Group) getGroup(groupPosition); 
     if(convertView==null) { 
      convertView=inflater.inflate(R.layout.group_view, null);   
     } 

     groupName=(TextView) convertView.findViewById(R.id.textViewGroupName); 
     groupName.setText(group.getGroupName()); 
     final CheckBox chkParent=(CheckBox)convertView.findViewById(R.id.checkBoxH); 
     chkParent.setChecked(isCheckedHeader.get(groupPosition)); 
     final int iPos = groupPosition; 
     chkParent.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       if(chkParent.isChecked()) { 
        isCheckedHeader.set(iPos, true); 
        //Checking all SubItem(Childs) of this 
        int iSizeChilds = getChildrenCount(iPos); 
        for(int i=0;i<iSizeChilds;i++) { 
         IsCheckedChild.get(groups.get(iPos)).set(i, true); 
        } 
       } 
       notifyDataSetChanged(); 
      } 
     }); 
     return convertView; 
    } 

    public boolean isChildSelectable(int groupPosition, int childPosition) { 
     return true; 
    } 

    public boolean hasStableIds() { 
     return true; 
    } 
} 

//Group.java 내 코드입니다.

MainActivity.java: 

    public class MainActivity extends Activity { 
    /*our expandable adapter */ 
    ExpandableListAdapter expandableListAdapter; 
    /*expandable list*/ 
    ExpandableListView expandableListView; 
    /*list items*/ 
    ArrayList<Group> groups=new ArrayList<Group>(); 
    ArrayList<Boolean> isCheckedHeader; 
    HashMap<String, ArrayList<Boolean>> IsCheckedChild; 
     @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     isCheckedHeader=new ArrayList<Boolean>(); 
     IsCheckedChild=new HashMap<String, ArrayList<Boolean>>(); 
     /*genarate data for list view*/ 
     genarateData(); 
     /*instantiate adapter with our item list*/ 
     expandableListAdapter=new ExpandableListAdapter(this, groups,isCheckedHeader,IsCheckedChild); 
     /*we get list view*/ 
     expandableListView=(ExpandableListView) findViewById(R.id.expandableListView); 
     /*set adapter to list view*/ 
     expandableListView.setAdapter(expandableListAdapter); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 
    //Generate dummy data for list view 
    public void genarateData() { 
     Group group; 

     for (int i = 0; i < 10; i++) { 

      ArrayList<Child> childrens=new ArrayList<Child>(); 
      childrens.clear(); 
      Child child; 

      for (int j = 0; j < 5; j++) { 
       child=new Child(""+j, "Child "+j); 
       childrens.add(child); 
      } 
      group=new Group(""+i, " Group "+i, childrens); 
      groups.add(group); 
      isCheckedHeader.add(false); 
     } 
    } 
} 

여기 내 logcat입니다.

09-16 03:24:19.341: I/Process(1863): Sending signal. PID: 1863 SIG: 9 
09-16 03:24:27.871: D/dalvikvm(1903): GC_FOR_ALLOC freed 59K, 5% free 2949K/3092K, paused 31ms, total 32ms 
09-16 03:24:27.871: I/dalvikvm-heap(1903): Grow heap (frag case) to 3.562MB for 635812-byte allocation 
09-16 03:24:27.921: D/dalvikvm(1903): GC_FOR_ALLOC freed 2K, 4% free 3567K/3716K, paused 40ms, total 40ms 
09-16 03:24:28.441: D/AndroidRuntime(1903): Shutting down VM 
09-16 03:24:28.441: W/dalvikvm(1903): threadid=1: thread exiting with uncaught exception (group=0xb3a12ba8) 
09-16 03:24:28.451: E/AndroidRuntime(1903): FATAL EXCEPTION: main 
09-16 03:24:28.451: E/AndroidRuntime(1903): Process: com.android.guide.expandablelistview, PID: 1903 
09-16 03:24:28.451: E/AndroidRuntime(1903): java.lang.NullPointerException 
09-16 03:24:28.451: E/AndroidRuntime(1903):  at com.android.guide.expandablelistview.ExpandableListAdapter.getGroupView(ExpandableListAdapter.java:117) 
09-16 03:24:28.451: E/AndroidRuntime(1903):  at android.widget.ExpandableListConnector.getView(ExpandableListConnector.java:446) 
09-16 03:24:28.451: E/AndroidRuntime(1903):  at android.widget.AbsListView.obtainView(AbsListView.java:2263) 
09-16 03:24:28.451: E/AndroidRuntime(1903):  at android.widget.ListView.makeAndAddView(ListView.java:1790) 
09-16 03:24:28.451: E/AndroidRuntime(1903):  at android.widget.ListView.fillDown(ListView.java:691) 
09-16 03:24:28.451: E/AndroidRuntime(1903):  at android.widget.ListView.fillFromTop(ListView.java:752) 
09-16 03:24:28.451: E/AndroidRuntime(1903):  at android.widget.ListView.layoutChildren(ListView.java:1630) 
09-16 03:24:28.451: E/AndroidRuntime(1903):  at android.widget.AbsListView.onLayout(AbsListView.java:2091) 
09-16 03:24:28.451: E/AndroidRuntime(1903):  at android.view.View.layout(View.java:14817) 
09-16 03:24:28.451: E/AndroidRuntime(1903):  at android.view.ViewGroup.layout(ViewGroup.java:4631) 
09-16 03:24:28.451: E/AndroidRuntime(1903):  at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671) 
09-16 03:24:28.451: E/AndroidRuntime(1903):  at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525) 
09-16 03:24:28.451: E/AndroidRuntime(1903):  at android.widget.LinearLayout.onLayout(LinearLayout.java:1434) 
09-16 03:24:28.451: E/AndroidRuntime(1903):  at android.view.View.layout(View.java:14817) 
09-16 03:24:28.451: E/AndroidRuntime(1903):  at android.view.ViewGroup.layout(ViewGroup.java:4631) 
09-16 03:24:28.451: E/AndroidRuntime(1903):  at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) 
09-16 03:24:28.451: E/AndroidRuntime(1903):  at android.widget.FrameLayout.onLayout(FrameLayout.java:388) 
09-16 03:24:28.451: E/AndroidRuntime(1903):  at android.view.View.layout(View.java:14817) 
09-16 03:24:28.451: E/AndroidRuntime(1903):  at android.view.ViewGroup.layout(ViewGroup.java:4631) 
09-16 03:24:28.451: E/AndroidRuntime(1903):  at com.android.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:374) 
09-16 03:24:28.451: E/AndroidRuntime(1903):  at android.view.View.layout(View.java:14817) 
09-16 03:24:28.451: E/AndroidRuntime(1903):  at android.view.ViewGroup.layout(ViewGroup.java:4631) 
09-16 03:24:28.451: E/AndroidRuntime(1903):  at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) 
09-16 03:24:28.451: E/AndroidRuntime(1903):  at android.widget.FrameLayout.onLayout(FrameLayout.java:388) 
09-16 03:24:28.451: E/AndroidRuntime(1903):  at android.view.View.layout(View.java:14817) 
09-16 03:24:28.451: E/AndroidRuntime(1903):  at android.view.ViewGroup.layout(ViewGroup.java:4631) 
09-16 03:24:28.451: E/AndroidRuntime(1903):  at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1987) 
09-16 03:24:28.451: E/AndroidRuntime(1903):  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1744) 
09-16 03:24:28.451: E/AndroidRuntime(1903):  at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000) 
09-16 03:24:28.451: E/AndroidRuntime(1903):  at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5670) 
09-16 03:24:28.451: E/AndroidRuntime(1903):  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761) 
09-16 03:24:28.451: E/AndroidRuntime(1903):  at android.view.Choreographer.doCallbacks(Choreographer.java:574) 
09-16 03:24:28.451: E/AndroidRuntime(1903):  at android.view.Choreographer.doFrame(Choreographer.java:544) 
09-16 03:24:28.451: E/AndroidRuntime(1903):  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747) 
09-16 03:24:28.451: E/AndroidRuntime(1903):  at android.os.Handler.handleCallback(Handler.java:733) 
09-16 03:24:28.451: E/AndroidRuntime(1903):  at android.os.Handler.dispatchMessage(Handler.java:95) 
09-16 03:24:28.451: E/AndroidRuntime(1903):  at android.os.Looper.loop(Looper.java:136) 
09-16 03:24:28.451: E/AndroidRuntime(1903):  at android.app.ActivityThread.main(ActivityThread.java:5017) 
09-16 03:24:28.451: E/AndroidRuntime(1903):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-16 03:24:28.451: E/AndroidRuntime(1903):  at java.lang.reflect.Method.invoke(Method.java:515) 
09-16 03:24:28.451: E/AndroidRuntime(1903):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
09-16 03:24:28.451: E/AndroidRuntime(1903):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
09-16 03:24:28.451: E/AndroidRuntime(1903):  at dalvik.system.NativeStart.main(Native Method) 
09-16 03:25:11.961: I/Process(1903): Sending signal. PID: 1903 SIG: 9 


How can I correct this? 
PS:I'm a beginner. Thanks :) 
+0

로그를 남겨주세요. 어떤 장소에 예외가 생깁니 까? – prakash

+0

프로그램을 실행할 때 오류가 발생합니다. –

+0

로그를 게시하면 생각보다 많은 정보가 있습니다. ** isCheckedHeader ** 및 ** IsCheckedChild **가 전체 코드 인 경우 시작되지 않습니다. – BlackBeard

답변

0

이 코드를 시도

대신

Group group=(Group) getGroup(groupPosition); 

을 사용하는 final Parent parent = parents.get(groupPosition);을 사용하여 다음 링크에서 체크 박스 setcheck-

CheckBox checkbox = (CheckBox) convertView.findViewById(R.id.checkbox); 
checkbox.setChecked(parent.isChecked()); 

모양을 변경할 수 : link

+0

Not working.Group은 상위 Bean 클래스의 이름입니다. 그룹 대신 학부모에게 줄 수있는 방법 –

+0

arraylist isCheckHeader가 null 인 것을 발견했습니다.그게 왜 null ponter 예외를 보여주고 있는지. 그러나 나는 그 arraylist에 어디에서 추가할지 모른다. –

+0

부울 arraylist를 genarateData()에 추가하십시오. mainactivity에서 – prakash

0

모든 개체가 제대로 초기화되지 않았다고 생각합니다. 어떤 물건은 가치가 있습니다. 개체를 올바르게 초기화했는지 확인하십시오.