package com.circlegate.liban.fragment; import java.util.ArrayList; import java.util.List; import android.content.res.Resources; import android.os.Bundle; import android.support.v4.app.ListFragment; import com.circlegate.liban.base.GlobalContextLib; import com.circlegate.liban.fragment.BaseFragmentCommon.IBaseFragmentActivity; import com.circlegate.liban.fragment.BaseFragmentCommon.OnBackPressedListener; public class BaseListFragment extends ListFragment implements OnBackPressedListener { private final List<Runnable> pendingTasks = new ArrayList<Runnable>(); private boolean readyToCommitFragments = false; private final List<Runnable> delayedTasks = new ArrayList<Runnable>(); private boolean delayTasks = false; private boolean isInitialOnResume = false; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.isInitialOnResume = true; } @Override public void onStart() { super.onStart(); if (getActivity() instanceof IBaseFragmentActivity) { ((IBaseFragmentActivity)getActivity()).addOnBackPressedListener(this); } } @Override public void onResume() { super.onResume(); this.readyToCommitFragments = true; for (Runnable r : this.pendingTasks) { r.run(); } this.pendingTasks.clear(); } @Override public void onPause() { this.readyToCommitFragments = false; this.isInitialOnResume = false; super.onPause(); } @Override public void onStop() { super.onStop(); if (getActivity() instanceof IBaseFragmentActivity) { ((IBaseFragmentActivity)getActivity()).removeOnBackPressedListener(this); } } @Override public void onSaveInstanceState(Bundle outState) { this.readyToCommitFragments = false; super.onSaveInstanceState(outState); } public Resources getResourcesSafe() { if (getActivity() != null) return getActivity().getResources(); else return GlobalContextLib.get().getAndroidContext().getResources(); } public void addPendingTask(Runnable task) { this.pendingTasks.add(task); } public boolean isReadyToCommitFragments() { return readyToCommitFragments; } public boolean isInitialOnResume() { return isInitialOnResume; } public void addDelayedTask(Runnable task) { if (!delayTasks) task.run(); else this.delayedTasks.add(task); } public void setDelayTasks(boolean delayTasks) { if (this.delayTasks != delayTasks) { this.delayTasks = delayTasks; if (!delayTasks) { if (readyToCommitFragments) { for (Runnable task : delayedTasks) task.run(); } else { for (Runnable task : delayedTasks) addPendingTask(task); } delayedTasks.clear(); } } } @Override public boolean onBackPressed() { return false; } }