지금은 expandablelistview에 관한 문제가 있습니다. 문제는 onChildClickListener와 getChildView 사이에 충돌이있는 것 같습니다.OnChildClickListener를 호출 한 후 getChildView의 ImageView가 더 이상 업데이트되지 않습니다.
간단히 : 하나는 groupitem를 클릭하면 두 submenuitems가 나타납니다. 이 (2) 하위 메뉴에는 이미지를로드하는 이미지 뷰가 있습니다. 그리고이 항목들 중 하나가 클릭되면 또 다른 이미지 뷰가 생성됩니다 - 이번에는 onChildClickListener 메서드를 사용하십시오. 여태까지는 그런대로 잘됐다. 그러나 하나의 응용 프로그램에서 다른 그룹 항목을 계속 확장하는 경우 - onChildClickListener-method에서 생성 된 이미지 뷰가 여전히 존재합니다 (getChildView의 이미지 뷰가 아님).
나는 당신이 여기에서 찾을 수 있습니다 스택에 비슷한 질문을 발견했다. 그러나 문제는 리스너와 getGroupView 사이에있었습니다.custom views not updating with OnGroupClickListener on ExpandableListView
그 이유는 무엇입니까? 캐싱과 관련이 있습니까? 어떤 제안이라도이 모든 문제를 해결하는 방법은 무엇입니까? 여러 가지 방법을 시도했습니다 ... invalidate(), invalidateviews(), setWillNotCacheDrawing (true), setItemsCanFocus (false) 등등.
요약하면 : onchildclicklistener가 호출 될 때 - getchildview의 이미지가 더 이상로드되지 않고 청취자의 이미지 만 요약됩니다. 청취자
expListW.get().setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
Object e = (Object)adapterW.get().getChild(groupPosition, childPosition);
int nmbr_childs = adapter.getChildrenCount(groupPosition);
final int group_position = groupPosition;
switch (childPosition) {
case 0:
if (nmbr_childs > 1) {
myVoice = soundPool.load(PhraseActivity.wr.get(), sound[group_position][0], 2);
soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
@Override
public void onLoadComplete(SoundPool soundPool, int sampleId,
int status) {
soundPool.play(myVoice, 20, 20, 1, 0, 1f);
}
});
speakerImage = (ImageView) v.findViewById(R.id.single);
speakerImage.setBackgroundResource(R.drawable.smile);
}
else {
myVoice = soundPool.load(PhraseActivity.this, sound[group_position][0], 2);
soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
@Override
public void onLoadComplete(SoundPool soundPool, int sampleId,
int status) {
soundPool.play(myVoice, 20, 20, 1, 0, 1f);
}
});
speakerImage = (ImageView) v.findViewById(R.id.single);
speakerImage.setBackgroundResource(R.drawable.smile);
}
break;
case 1:
myVoice = soundPool.load(PhraseActivity.this, sound[group_position][1], 2);
soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
@Override
public void onLoadComplete(SoundPool soundPool, int sampleId,
int status) {
soundPool.play(myVoice, 20, 20, 1, 0, 1f);
}
});
speakerImage = (ImageView) v.findViewById(R.id.single);
speakerImage.setBackgroundResource(R.drawable.smile);
break;
}
return true;
}
});
여기에 getChildView-방법입니다 아래
...
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final ViewHolder holder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.activity_subphrase, parent, false);
holder = new ViewHolder();
holder.text = (TextView) convertView.findViewById(R.id.label_single);
holder.text2 = (TextView) convertView.findViewById(R.id.label_couple);
holder.imageView = (ImageView) convertView.findViewById(R.id.icon);
holder.imageView2 = (ImageView) convertView.findViewById(R.id.couple);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
final int nChildren = getChildrenCount(groupPosition);
final View v = convertView;
switch (nChildren) {
case 1:
holder.imageView.setImageResource(0);
holder.imageView2.setBackgroundResource(0);
holder.text.setText(null);
holder.text2.setText(contents[groupPosition][childPosition]);
holder.imageView2.setBackgroundResource(R.drawable.man_woman_3);
extra(groupPosition, category, holder.text, convertView, parent);
ViewTreeObserver vto = convertView.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
public void onGlobalLayout() {
v.getViewTreeObserver().removeOnGlobalLayoutListener(this); //vet inte om denna metod är nödvändig
holder.imageView2.setBackgroundResource(R.drawable.animation3);
frameAnimation = (AnimationDrawable) holder.imageView2.getBackground();
frameAnimation.start();
}});
break;
case 2:
holder.imageView.setImageResource(0);
holder.imageView2.setBackgroundResource(0);
holder.text2.setText(null);
holder.imageView.invalidate();
holder.text.setText(contents[groupPosition][childPosition]);
switch (childPosition) { // Switch-villkor för man eller kvinna.
case 0: // Man.
holder.imageView.setImageResource(R.drawable.man_33);
break;
case 1: // Kvinna.
holder.imageView.setImageResource(R.drawable.woman_33);
break;
}
break;
}
notifyDataSetChanged();
return convertView;
}
도움을 매우 greatful !!!!!