그냥 내 경우에는, 비트 맵 배경 작업 만하는 경우 @ hp.android에서 대답은 잘 작동, 나는이 한 BaseAdapter
세트 제공하는 ImageView
A의들 GridView
. unbindDrawables()
조건이 다음과 같도록 조언 된대로 방법을 수정했습니다 .
if (view instanceof ViewGroup && !(view instanceof AdapterView)) {
...
}
그러나 문제는 재귀 메서드가 AdapterView
. 이 문제를 해결하기 위해 대신 다음을 수행했습니다.
if (view instanceof ViewGroup) {
ViewGroup viewGroup = (ViewGroup) view;
for (int i = 0; i < viewGroup.getChildCount(); i++)
unbindDrawables(viewGroup.getChildAt(i));
if (!(view instanceof AdapterView))
viewGroup.removeAllViews();
}
의 자식 AdapterView
이 여전히 처리되도록-메서드는 지원되지 않는 모든 자식을 제거하려고 시도하지 않습니다.
그러나 ImageView
s는 배경이 아닌 비트 맵을 관리 하므로 문제가 해결되지 않습니다 . 따라서 다음을 추가했습니다. 이상적이지는 않지만 작동합니다.
if (view instanceof ImageView) {
ImageView imageView = (ImageView) view;
imageView.setImageBitmap(null);
}
전반적으로 unbindDrawables()
방법은 다음과 같습니다.
private void unbindDrawables(View view) {
if (view.getBackground() != null)
view.getBackground().setCallback(null);
if (view instanceof ImageView) {
ImageView imageView = (ImageView) view;
imageView.setImageBitmap(null);
} else if (view instanceof ViewGroup) {
ViewGroup viewGroup = (ViewGroup) view;
for (int i = 0; i < viewGroup.getChildCount(); i++)
unbindDrawables(viewGroup.getChildAt(i));
if (!(view instanceof AdapterView))
viewGroup.removeAllViews();
}
}
그러한 자원을 확보하는 데보다 원칙적인 접근 방식이 있기를 바랍니다.