How to disable back button pressed in android fragment class

后端 未结 9 1141
别跟我提以往
别跟我提以往 2020-12-11 14:39

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

相关标签:
9条回答
  • 2020-12-11 14:58

    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
    
    0 讨论(0)
  • 2020-12-11 15:00

    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.
        }
    
    0 讨论(0)
  • 2020-12-11 15:06

    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);
    
    0 讨论(0)
  • 2020-12-11 15:08

    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
      ...
    }
    
    0 讨论(0)
  • 2020-12-11 15:08

    OnBackPressedCallback

    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);
    
         }
    
    }
    

    Relevant link

    You can read and research more on this HERE

    0 讨论(0)
  • 2020-12-11 15:10

    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;  
        }  
    });
    
    0 讨论(0)
提交回复
热议问题