2011-03-21 2 views
2

사용자가 확장 및 축소 할 때 상태를 변경해야하는 사용자 정의 groupView가 있습니다. 동일한 그룹보기가 펼쳐져 있으면 두 상태가 서로 전환됩니다.사용자 정의보기가 ExpandableListView의 OnGroupClickListener로 업데이트되지 않습니다.

내가 겪고있는 문제는 expand 메서드를 호출 한 후 내 업데이트가 표시되지 않기 때문에 expand 메서드가 일부 캐시 된 버전의 뷰를 가져 오는 것 같습니다.

내 리스너가 expandGroup을 호출하지 않고 true (전체 이벤트 자체를 처리 함)를 반환하면 업데이트가 수행됩니다. 그래서 무언가가 일어나고있는 것은 오직 캐시 된 뷰만이 그려지도록하는 expandGroup입니다. 나는 모든 것에 대해 무효화()를 시도했다. 목록보기에서 데이터 업데이트 이벤트를 실행하려고 시도했습니다. 나뿐만 아니라 모든 다른 물건을 시도했다 :

expandableList.setGroupIndicator(null); 
     expandableList.setAlwaysDrawnWithCacheEnabled(false); 
     expandableList.setWillNotCacheDrawing(true); 
     expandableList.setItemsCanFocus(false); 

사람들의에 행운이 :(

여기 내 온 클릭 코드입니다!

expandableList.setOnGroupClickListener(new OnGroupClickListener() { 

      public boolean onGroupClick(ExpandableListView parent, View v, 
        int groupPosition, long id) { 
       MusicTrackRow mt = (MusicTrackRow) v; 

       if (mt.isPlaying == true) { 
        mt.setPaused(); 
       } else { 
        mt.setPlaying(); 
       } 
       mt.invalidate(); 
       parent.invalidate(); 
       trackAdapter.notifyDataSetInvalidated(); 
//need to call expandGroup if the listener returns true.. if returning false expandGroup is //returned automatically 
           expandableList.expandGroup(groupPosition); //no view refresh 
        return true; 

답변

5

솔루션 마침내 찾을 수

확장 가능한 목록을 확장하면 목록의 모든 그룹에 대해 어댑터의 getGroupview가 호출됩니다. 변경 사항을 적용하려는 곳입니다. isExpanded 인수를 사용하면 확장 된 그룹보기를 결정할 수 있습니다.

public View getGroupView(int groupPosition, boolean isExpanded, 
      View convertView, ViewGroup parent) { 
     View v; 
     if (convertView == null) { 
      LayoutInflater inflater = (LayoutInflater) getBaseContext() 
        .getSystemService(LAYOUT_INFLATER_SERVICE); 
      v = inflater.inflate(R.layout.expandablelistitem, null); 

     } else { 
      v = convertView; 
     } 
     int id = (!isExpanded) ? R.drawable.list_plus_selector 
       : R.drawable.list_minus_selector; 

     TextView textView = (TextView) v.findViewById(R.id.list_item_text); 
     textView.setText(getGroup(groupPosition).toString()); 

     ImageView icon = (ImageView) v.findViewById(R.id.list_item_icon); 

     icon.setImageResource(id); 
     return v; 

    } 
:

그런 다음 당신은 다음과 같습니다 물건을 할 수 있습니다

관련 문제