This post explains how to handle hardware back button in a Fragment OR DialogFragment.
In DialogFragment, it’s quiet straight forward to achieve this. You’ve to get the dialog instance and set onKeyListener on it :
if (getDialog() != null) {
getDialog().setOnKeyListener(new DialogInterface.OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) {
Timber.i("hardware back button pressed");
}
}
});
}
This can be done in the onViewCreated
callback.For fragments, this method doesn’t work and fragments doesn’t have a direct callback to catch this event. So in this case, the approach that we follow is :
You have to catch this event in activity’s
onBackPressed
method and then call a method on your fragment that handles this, something like :@Override
public void onBackPressed() {
Fragment fragment = getSupportFragmentManager().findFragmentByTag(tagWithWhichYouAddedIt);
if (fragment.handlebackPress()) { // and then you define a method handlebackPress with the logic to handle back press or not
// decide how you want to proceed
}
}
Note that you’ll find some references on internet which ask you to set
KeyListener
on fragment’s parent view, but that doesn’t work.Let me know in case of any doubts.
Cheers !
Comments
Post a Comment