カスタムの 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 を使用しても Fragment を正しくインフレートできないため、Fragment のルック アンド フィールをカスタマイズします。一方、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;
}
イベントがキャプチャされません。これは別の質問につながります...多くのSOの質問でonCreateDialogとonCreateViewを明確に使用しているのを見たので... 2つの違いは本当に何ですか?
ありがとう!