I want to disable the back button in a fragment class. onBackPressed()
doesn\'t seem to work in this fragment. How could I disable the back button?
This
I know it's too late, In fragment onCreate
val callback = requireActivity().onBackPressedDispatcher.addCallback(this) {
Log.d("tag","back button pressed") // Handle the back button event
}
callback.isEnabled
Here is the new way you can manage your onBackPressed()
in fragment with the new call back of activity:
// Disable onBack click
requireActivity().onBackPressedDispatcher.addCallback(this) {
// With blank your fragment BackPressed will be disabled.
}
if you want to fragment never closed without any button action you can try to prevent cancel Fragment.
In your fragment method add this
this.setCancelable(false);
You have to override onBackPressed of parent FragmentActivity class. Therefore, put your codes in parent FragmentActivity. Or you can call parent's method by using this:
public void callParentMethod(){
getActivity().onBackPressed();
}
in FragmentActivity override onBackPressed Method and not call its super class to disable back button.
@Override
public void onBackPressed() {
//super.onBackPressed();
//create a dialog to ask yes no question whether or not the user wants to exit
...
}
Here is the code which you can write in your Fragment class to customize the back button press.
public class MyFragment extends Fragment{
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
OnBackPressedCallback callback = new OnBackPressedCallback(true /* enabled by default */) {
@Override
public void handleOnBackPressed() {
// Handle the back button even
Log.d("BACKBUTTON", "Back button clicks");
}
};
requireActivity().getOnBackPressedDispatcher().addCallback(this, callback);
}
}
You can read and research more on this HERE
In your oncreateView() method you need to write this code and in KEYCODE_BACk return should true then it will stop the back button option for particular fragment
View v = inflater.inflate(R.layout.xyz, container, false);
//Back pressed Logic for fragment
v.setFocusableInTouchMode(true);
v.requestFocus();
v.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
return true;
}
}
return false;
}
});