onBackPressed()不起作用

时间:2014-02-11 09:29:20

标签: android dialog fragment back-button

我在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

感谢您的所有帮助和时间。

4 个答案:

答案 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)

答案 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;
        }
    }
});