Невозможно отключить кнопку «Назад» в onCreateView для DialogFragment

Я немного озадачен здесь при создании пользовательского диалогового окна Progress DialogFragment. Все работает нормально, но, поскольку я не хочу, чтобы пользователь "возвращался" до тех пор, пока DialogFragment не будет отклонен, я пытаюсь захватить KeyEvent и "отключить".

Пока это отлично работает:

    @Override
public ProgressDialog onCreateDialog(Bundle savedInstanceState) {

    final ProgressDialog dialog = new ProgressDialog(getActivity());
    dialog.setMessage(getString(R.string.loading_text));
    dialog.setIndeterminate(true);
    dialog.setCancelable(false);

    // Disable the back button
    OnKeyListener keyListener = new OnKeyListener() {

        @Override
        public boolean onKey(DialogInterface dialog, int keyCode,
                KeyEvent event) {
            if( keyCode == KeyEvent.KEYCODE_BACK){  
                return true;
            }
            return false;
        }
    };
    dialog.setOnKeyListener(keyListener);
    return dialog;
}

Использование onCreateDialog не позволяет мне правильно раздувать фрагмент и, таким образом, настраивать внешний вид моего фрагмента. onCreateDialog, с другой стороны, отлично фиксирует событие нажатия клавиши возврата. При переключении на onCreateView:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    //Inflate the XML view for the help dialog fragment
    View view = inflater.inflate(R.layout.progress_dialog_fragment, container);
    TextView text = (TextView)view.findViewById(R.id.loadingMessage);
    text.setText(Html.fromHtml(getString(R.string.loading_text)));

    // Disable the back button
    android.view.View.OnKeyListener keyListener = new android.view.View.OnKeyListener() {

        @Override
        public boolean onKey(View view, int keyCode, KeyEvent event) {
            if( keyCode == KeyEvent.KEYCODE_BACK){  
                return true;
            }
                return false;
        }
    };
    view.setOnKeyListener(keyListener);

    // request a window without the title
    getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
    //Transparent Dialog background
    getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(0));
    return view;
}

Событие не фиксируется. Это приводит меня к другому вопросу... так как я видел использование onCreateDialog и onCreateView отчетливо во многих SO-вопросах... в чем разница между ними на самом деле?

Спасибо!


person AlejandroVK    schedule 14.03.2013    source источник