Skip to content

Instantly share code, notes, and snippets.

@Anrimian
Created February 6, 2019 13:25
Show Gist options
  • Save Anrimian/b939bc91c756a2db1b2df8b7612b9779 to your computer and use it in GitHub Desktop.
Save Anrimian/b939bc91c756a2db1b2df8b7612b9779 to your computer and use it in GitHub Desktop.
import android.os.Bundle;
import com.arellomobile.mvp.MvpDelegate;
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
import androidx.fragment.app.Fragment;
public class MvpBottomSheetDialogFragment extends BottomSheetDialogFragment {
private boolean mIsStateSaved;
private MvpDelegate<? extends MvpBottomSheetDialogFragment> mMvpDelegate;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getMvpDelegate().onCreate(savedInstanceState);
}
public void onResume() {
super.onResume();
mIsStateSaved = false;
getMvpDelegate().onAttach();
}
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mIsStateSaved = true;
getMvpDelegate().onSaveInstanceState(outState);
getMvpDelegate().onDetach();
}
@Override
public void onStop() {
super.onStop();
getMvpDelegate().onDetach();
}
@Override
public void onDestroyView() {
super.onDestroyView();
getMvpDelegate().onDetach();
getMvpDelegate().onDestroyView();
}
@Override
public void onDestroy() {
super.onDestroy();
//We leave the screen and respectively all fragments will be destroyed
if (getActivity().isFinishing()) {
getMvpDelegate().onDestroy();
return;
}
// When we rotate device isRemoving() return true for fragment placed in backstack
// http://stackoverflow.com/questions/34649126/fragment-back-stack-and-isremoving
if (mIsStateSaved) {
mIsStateSaved = false;
return;
}
// See https://github.com/Arello-Mobile/Moxy/issues/24
boolean anyParentIsRemoving = false;
Fragment parent = getParentFragment();
while (!anyParentIsRemoving && parent != null) {
anyParentIsRemoving = parent.isRemoving();
parent = parent.getParentFragment();
}
if (isRemoving() || anyParentIsRemoving) {
getMvpDelegate().onDestroy();
}
}
/**
* @return The {@link MvpDelegate} being used by this Fragment.
*/
public MvpDelegate getMvpDelegate() {
if (mMvpDelegate == null) {
mMvpDelegate = new MvpDelegate<>(this);
}
return mMvpDelegate;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment