Detect back button but don't dismiss dialogfragment

后端 未结 9 1189
时光取名叫无心
时光取名叫无心 2020-11-30 02:00

I have a dialogfragment for a floating dialog which includes a special keyboard that pops up when a user presses inside an EditText field (the normal IME is stopped from bei

9条回答
  •  暗喜
    暗喜 (楼主)
    2020-11-30 02:51

    I had the same problem than you and I've fixed it attaching the onKeyListener to the dialogfragment.

    In the method onResume() of the class that extend of DialogFragment put these piece of code:

        getDialog().setOnKeyListener(new OnKeyListener()
        {
            @Override
            public boolean onKey(android.content.DialogInterface dialog, int keyCode,android.view.KeyEvent event) {
    
                if ((keyCode ==  android.view.KeyEvent.KEYCODE_BACK))
                    {
                         //Hide your keyboard here!!!
                         return true; // pretend we've processed it
                    }
                else 
                    return false; // pass on to be processed as normal
            }
        });
    

    Here one of the problems that you can find is this code is going to be executed twice: one when the user press tha back button and another one when he leave to press it. In that case, you have to filter by event:

    @Override
    public void onResume() {
        super.onResume();
    
        getDialog().setOnKeyListener(new OnKeyListener()
        {
            @Override
            public boolean onKey(android.content.DialogInterface dialog, int keyCode,
                    android.view.KeyEvent event) {
    
                if ((keyCode ==  android.view.KeyEvent.KEYCODE_BACK))
                {
                    //This is the filter
                    if (event.getAction()!=KeyEvent.ACTION_DOWN)
                            return true;
                    else
                    {
                        //Hide your keyboard here!!!!!!
                        return true; // pretend we've processed it
                    }
                } 
                else 
                    return false; // pass on to be processed as normal
            }
        });
    }
    

提交回复
热议问题