2014-12-18 3 views
1

외부에서 ExpandableListView에서 (색상)이 두 조각이있다.수정 자식 요소 어댑터

버튼을 누르면 확장형 목록보기의 하위 요소 중 하나의 색이 변경됩니다. 어떤 부모와 자식 ID가 될지 알게 될 것입니다. 하지만 BaseExpandableListAdapter 대신 Fragment B 클래스에서 자식 요소에 액세스하는 방법.

답변

2

자식 요소의 클래스에서 멤버 변수를 만들어 색을 추적합니다. 그런 다음이 새 멤버 변수를 기반으로 자식 요소의 색을 변경하려면 ListAdapter가 필요합니다. 이제 버튼을 누르면이 색상 변수를 변경하고 ListAdapter에서 notifyDataSetChanged()를 호출하면됩니다.

예 : 나는 두 변수 즉, 기본 색상과 새로운 색상을 가지고 :

class ChildElement { 
    int color; 
} 

@Override 
public View getView(final int position, View convertView, final ViewGroup parent) { 
    ChildElement e = getItem(position); 
    ViewHolder holder; 
    ... 
    holder.view.setBackgroundColor(e.color); 
    ... 
} 

그런 다음 색상 여기

elements.get(position).color = newColor; 
adapter.notifyDataSetChanged(); 
+0

유일한 질문이

if (child.getId() == currentlyActiveChild) { txtListChild.setTextColor(Color.RED); } else { txtListChild.setTextColor(defaultChildColor); } 

를 사용합니다. 나는 'notifyDataSetChanged();'라고 생각했다. 트릭을 할 것이지만 불행히도 나는 두 가지 항목을 수정했다. – TommyLeeJones

+0

이렇게 할 수있는 한 가지 방법은 모든 요소를 ​​반복하고 모든 색상을 다시 설정하는 것입니다. 그런 다음 원하는 요소의 색상을 설정하십시오. 또 다른 방법은 색상을 설정 한 마지막 요소를 기억하고 새 요소의 색상을 설정할 때마다 마지막 요소를 재설정하는 것입니다. – idunnololz

0

가 나는 것을 어떻게했는지 방법입니다 변경합니다. getChildView 여기에 코드 조각이 내부 나는 분명히 어댑터 안에 내가 이전 항목의 색상을 다시 변경하는 방법 것

public void setActiveChild(long newID) { 
    currentlyActiveChild = newID; 
    notifyDataSetChanged(); 

}