【发布时间】:2014-02-11 09:29:20
【问题描述】:
我在应用启动时显示了一个对话框,您必须在其中选择一个配置。由于选择一个配置很重要,我想通过一个空的onBackPressed()“禁用”后退按钮。
我在DialogFragment 中得到了以下代码:
public class ChangeConfigDialogFragment extends DialogFragment {
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the Builder class for convenient dialog construction
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(R.string.dialog_config_change)
.setItems(R.array.config_array,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
// The 'which' argument contains the index
// position
// of the selected item
if (which == 0){
Initiation.BAUDRATE = 500;
Toast.makeText(getActivity(), "Baudrate at " + Initiation.BAUDRATE, Toast.LENGTH_LONG).show();
if (Initiation.getADK() == null){
Initiation.initiateCAN();
}
} else if (which == 1) {
Initiation.BAUDRATE = 600;
Toast.makeText(getActivity(), "Baudrate at " + Initiation.BAUDRATE, Toast.LENGTH_LONG).show();
if (Initiation.getADK() == null){
Initiation.initiateCAN();
}
} else if (which == 2) {
Initiation.BAUDRATE = 700;
Toast.makeText(getActivity(), "Baudrate at " + Initiation.BAUDRATE, Toast.LENGTH_LONG).show();
if (Initiation.getADK() == null){
Initiation.initiateCAN();
}
}
}
});
// Create the AlertDialog object and return it
return builder.create();
}
public void onBackPressed(){
Log.d(getTag(), "are you there?");
}
}
问题是,onBackPressed() 从未被调用过。连日志消息都没有出现。
我试图清理项目,但没有成功。还尝试在 SO 上使用来自其他一些主题的 onKeyDown 方法。有谁知道如何解决这个问题?
编辑:
现在可以了。 .setCancelable(false); 有效,但我愚蠢地将其添加到调用 Fragment 的 Dialog 中。 (而是将其添加到builder
感谢您的所有帮助和时间。
【问题讨论】:
-
onBackPressed()是一个活动,而不是片段方法 - 你没有覆盖任何东西。你想通过覆盖它来实现什么? -
设置一个 KeyListener 怎么样?
-
我试过了,因为在另一个应用程序中它可以工作。所以我只是复制了
onBackPressed()的代码并认为它可以工作,因为它没有我开始搜索答案 -
您不能检查开发人员文档所说的内容,而不是寻找答案吗?
-
据我了解,DialogFragment 无法处理
onBackPressed(),因为它是一个 Activity 方法。所以我必须处理我的活动的onBackPressed()。在开发人员文档中我找不到它,所以如果对话框是“活动的”,是否可以从我的Activity内部检查?
标签: android dialog fragment back-button