我在app-start上显示一个Dialog,你必须选择一个配置。由于必须选择一个配置,我想通过空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);
有效,但我很愚蠢地将其添加到Dialog
被调用的Fragment
。 (而是将其添加到builder
感谢您的所有帮助和时间。
答案 0 :(得分:3)
从您的问题看来,当您的对话框打开时,您无需关闭对话框,直到用户可以从对话框中选择任何1打开,如果我没有错,那么为此您不需要禁用后退键但是您必须为对话框设置这两个属性。
dialog.setCancelable(false);
dialog.setCanceledOnTouchOutside(false);
OR
如果要禁用后退密钥,请使用以下代码
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
//preventing default implementation previous to android.os.Build.VERSION_CODES.ECLAIR
return true;
}
return super.onKeyDown(keyCode, event); }
OnbackkeyPressed需要Api等级5或更高。
@Override
public void onBackPressed() {
}
答案 1 :(得分:1)
使用builder.setCancelable(false)
http://developer.android.com/reference/android/app/AlertDialog.Builder.html#setCancelable(boolean)
答案 2 :(得分:1)
<强>尝试强>
public boolean onKeyDown(int keyCode, KeyEvent event) {
// Handle the back button
if (keyCode == KeyEvent.KEYCODE_BACK) {
return false;
}
return super.onKeyDown(keyCode, event);
}
或
dialog.setCancelable(false);
答案 3 :(得分:0)
我没有尝试过这个,但如果你在构建器上设置OnKeyListener
,它可能会有效:
builder.setOnKeyListener(new DialogInterface.OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
return false;
}
}
});