Last active
August 29, 2015 14:07
-
-
Save mataanin/9e676bf05ab0648e315a to your computer and use it in GitHub Desktop.
NPE on ButterKnife view references safe callbacks for Fragments.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public abstract class BaseFragment extends Fragment implements ViewableFragment { | |
private boolean mHasViews; | |
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { | |
View root = inflater.inflate(getFragmentLayoutId(), null); | |
ButterKnife.inject(this, root); | |
return root | |
} | |
@Override public void onViewStateRestored(Bundle state) { | |
super.onViewStateRestored(state); | |
mHasViews = true; | |
} | |
@Override public void onDestroyView() { | |
super.onDestroyView(); | |
ButterKnife.reset(this); | |
mHasViews = false; | |
} | |
@Override public boolean hasViews() { | |
return mHasViews; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class OnPreDrawListenerWrapper implements ViewTreeObserver.OnPreDrawListener { | |
private final ViewTreeObserver.OnPreDrawListener mListener; | |
private WeakReference<Fragment> mFragment; | |
public OnPreDrawListenerWrapper(Fragment fragment, ViewTreeObserver.OnPreDrawListener listener) { | |
mFragment = new WeakReference<>(fragment); | |
mListener = listener; | |
} | |
@Override public boolean onPreDraw() { | |
if (canExecute()) { | |
return mListener.onPreDraw(); | |
} | |
return true; | |
} | |
private boolean canExecute() { | |
return mFragmentRef.get() != null && mFragmentRef.get().hasViews(); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class RunnableWrapper implements Runnable { | |
private final WeakReference<ViewableFragment> mFragmentRef; | |
private final Runnable mRunnable; | |
public RunnableWrapper(ViewableFragment fragment, Runnable runnable) { | |
mFragmentRef = new WeakReference<>(fragment); | |
mRunnable = runnable; | |
} | |
@Override public void run() { | |
if (canExecute()) { | |
mRunnable.run(); | |
} | |
} | |
private boolean canExecute() { | |
return mFragmentRef.get() != null && mFragmentRef.get().hasViews(); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public interface ViewableFragment { | |
boolean hasViews(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
The earliest possible.