在創建自定義進度對話框片段時,我有點不解。一切工作正常,但因爲我不希望用戶「回去」,直到DialogFragment被解僱,我試圖捕獲KeyEvent和「禁用」。無法在onCreateView中禁用對話框片段的後退按鈕
雖然這個偉大的工程:
@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;
}
事件沒有被捕獲。這導致我另一個問題......因爲我已經看到在許多SO問題中明顯使用onCreateDialog和onCreateView ......這兩者之間有什麼區別呢?
謝謝!
你好Martjin,和什麼。從你的第一段我假設onCreateView是我需要的,而不是onCreateDialog ... – AlejandroVK 2013-03-14 15:16:00
沒關係,我打電話setCancellable從活動,顯示對話框,感謝指出它Martijin!正確答案+ upvote :) – AlejandroVK 2013-03-14 15:27:13
這不起作用。你必須在DialogFragment上調用'setCancelable(boolean)',而不是在'Dialog'上調用,這正是你現在正在做的。 – Daniel 2014-03-24 18:03:05