@ Hp.android से जवाब अच्छी तरह से काम करता है अगर आप सिर्फ बिटमैप पृष्ठभूमि के साथ काम कर रहे हैं, लेकिन मेरे मामले में, मैं एक था BaseAdapter
का एक सेट उपलब्ध कराने के ImageView
एक के लिए रों 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
एक बिटमैप का प्रबंधन होता है जो उनकी पृष्ठभूमि नहीं है। इसलिए मैंने निम्नलिखित जोड़ा है। यह आदर्श नहीं है, लेकिन यह काम करता है:
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();
}
}
मुझे उम्मीद है कि इस तरह के संसाधनों को मुक्त करने के लिए अधिक राजसी दृष्टिकोण है।