android-fragments 显示对话框片段时,未调用Android dispatchKeyEvent

2skhul33  于 2022-11-14  发布在  Android
关注(0)|答案(2)|浏览(297)

当我的对话片段是hide时,dispatchKeyEvent工作正常

@Override
public boolean dispatchKeyEvent(KeyEvent event) {

    Toast.makeText(FragmentPlayer.this, "test: called", Toast.LENGTH_SHORT).show();

    return super.dispatchKeyEvent(event);

}

但当我的对话片段是show时,不调用dispatchKeyEvent

MyDialogFragment mFragment = new MyDialogFragment();
mFragment.show(getSupportFragmentManager(), "MyDialog");

为甚么?

doinxwow

doinxwow1#

不需要将您的DialogFragment代码更改为Dialog,您可以这样做(如果仍然需要)。使用OnKeyListener将解决您的问题。

public class BaseDialogFragment extends AppCompatDialogFragment {

  @Override
  public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    getDialog().setOnKeyListener(new DialogInterface.OnKeyListener() {
        @Override
        public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
            /* Your logic, you get the KeyEvent*/
            return false;
        }
    });
}
eanckbw9

eanckbw92#

在键操作的DialogFragment中,您可以用途:

getDialog().dispatchKeyEvent(event);

而不是

getActivity().dispatchKeyEvent(event);

相关问题