@ এইচপি.অ্যান্ড্রয়েডের উত্তরটি ভাল কাজ করে যদি আপনি কেবল বিটম্যাপ ব্যাকগ্রাউন্ড নিয়ে কাজ করছেন তবে আমার ক্ষেত্রে আমার কাছে একটি এর 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();
}
}
আমি আশা করছি যে এই জাতীয় সংস্থানগুলি মুক্ত করার জন্য আরও নীতিগত পন্থা রয়েছে।