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