タブコントローラーでタブ変更イベントをリッスンします。
tabLayout.setOnTabChangedListener(<listener>);
リスナーのコールバック メソッドで(onTabChanged(int index, boolean isUserInput))
、前のフラグメントを取得し、そのビューで再帰的な方法でアンバインド ドローアブルを呼び出します (それを記述する必要があります)。それを行った後、Dalvik VM にヒントを与えてガベージ コレクターを実行するように呼び出すこともできますSystem.gc()
(単なるヒントであり、保証はありません)。
バインド解除のサンプル コード:
public static void unbindDrawables(@Nullable View view) {
if (view == null) {
return;
}
if (view.getBackground() != null) {
view.getBackground().setCallback(null);
}
if (view instanceof ImageView && ((ImageView) view).getDrawable() != null) {
((ImageView) view).getDrawable().setCallback(null);
}
if (view instanceof ViewGroup) {
if (view instanceof AbsListView) {
// Clean out list view
List<View> cells = Lists.newLinkedList();
((AbsListView) view).reclaimViews(cells);
if (cells != null) {
for (View c : cells) {
unbindDrawables(c);
}
}
} else {
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
unbindDrawables(((ViewGroup) view).getChildAt(i));
}
}
}
}