2014-03-05 3 views
0

확장 가능한 목록보기의 그룹에서 항목에서 하위 항목을 삭제할 때 문제가 있습니다. 문제는 내 그룹이 확장되어 있고 ListView 어댑터에서 "notifyDataSetChanged"를 실행할 때 "getChildView"라는 자식이 삭제되는 것입니다. 나는 크기가 이제 0 인 배열에 액세스하고 Out of Bounds 예외를 얻습니다. "getChildrenCount"가 0을 반환하기 때문에 Expandable Listview가 자동으로 뷰를 삭제한다고 가정합니다. 그룹이 축소되면이 문제가 표시되지 않습니다. 더 이상 자식이 없으므로 List에는 자식 뷰가 표시되지 않습니다.Expanpandable ListView 그룹의 마지막 하위 항목을 삭제할 때 충돌이 발생합니다.

내 질문은 여기에 내 코드의 예입니다 당신이 확장 ListView에

의 확장 그룹의 마지막 아이를 삭제하는 방법입니다. 조건은 그룹이 확장되어 있고 모든 하위 항목을 삭제했으며이 함수가 여전히 호출되고 있다는 것을 이해합니다.

// This Function used to inflate child rows view 
    @Override 
    public View getChildView(
     int groupPosition, 
     int childPosition, 
     boolean isLastChild, 
     View convertView, 
     ViewGroup parentView) 
    { 
     Trade t = objArray[groupPosition]; 

     View childView = convertView; 
     if(childView == null) 
     { 
      LayoutInflater inflater = LayoutInflater.from(client); 
      childView = inflater.inflate(R.layout.item_textview, parentView, false); 
      ChildViewHolder childViewHolder = new ChildViewHolder(); 

      childViewHolder.itemTextView = (TextView)childView.findViewById(R.id.itemTextView); 
      childView.setTag(childViewHolder); 
     } 

     ChildViewHolder childViewHolder = (ChildViewHolder)childView.getTag(); 

     childViewHolder.itemTextView.setText("Term: " + t.getTradeTerms().get(childPosition)); 
     return childView; 
    } 

    @Override 
    public int getChildrenCount(int groupPosition) 
    { 
     return objArray[groupPosition].getTradeTerms().size(); 
    } 

답변

0

이 코드는 매우 유용합니다.

HashMap<String, List<String>> listDataChild; 
List<String> listDataHeader; 

// Listview on child click listener 
    expListView.setOnChildClickListener(new OnChildClickListener() { 

     @Override 
     public boolean onChildClick(ExpandableListView parent, View v, 
       int groupPosition, int childPosition, long id) { 
      // TODO Auto-generated method stub 

      listDataChild.get(listDataHeader.get(groupPosition)).remove(childPosition); 
      adapter.notifyDataSetChanged(); 

      return false; 
     } 
    }); 
+0

아니요. 도움이되지 않습니다. 어댑터에 전달 된 List를 통해 다른 창에서 데이터를 제거합니다. Exp를 발생시키는 adapter.notifyDataSetChanged()를 호출합니다. 다시 구성 할 목록보기. 이 실험을 시도하십시오. 확장 된 그룹에서 하위를 삭제하십시오. getChildView가 호출됩니다. 하위 데이터가 이미 삭제 된 경우이 이벤트를 어떻게 처리합니까? – user3383795

+1

다른 활동에서 데이터를 제거하면 공용 배열 목록을 사용하고 adatpter.notifyDataSetChaged(); –

관련 문제