kekk0
kekk0

Reputation: 57

Android dialog closes on any physical keypress

I have this dialog, with just a textView and no buttons. It displays some info and I need to change info on key press left and right. Unfortunately the dialog closes on any key. This code in MainActivity invokes the dialog (redundant code omitted)

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
    if (event.getKeyCode() == KeyEvent.KEYCODE_MENU) {
        if (event.getAction() == KeyEvent.ACTION_UP) {
            InfoDialog infoDialog = new InfoDialog();
            infoDialog.showDialog(this,currentDateAndTime,chn);
            return true;
        }
    }
    return super.dispatchKeyEvent(event);
}

and this is the dialog code

public class InfoDialog {
    private int counter = 0;
    private Dialog dialog;
    
    public void showDialog(final Activity activity, final String DateTime, final ChannelList.Channel chn){
        dialog = new Dialog(activity);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.setCancelable(false);
        dialog.setContentView(R.layout.info_dialog);

        counter = 0;
        setDialogText(chn,DateTime,counter);

        dialog.setOnKeyListener(new DialogInterface.OnKeyListener() {
            @Override
            public boolean onKey(DialogInterface dialogInterface, int i, KeyEvent keyEvent) {
                if (keyEvent.getKeyCode() == KeyEvent.KEYCODE_DPAD_LEFT) {
                    if (keyEvent.getAction() == KeyEvent.ACTION_UP) {
                        if (counter>0) counter--;
                        setDialogText(chn,DateTime,counter);
                        return true;
                    }
                }
                if (keyEvent.getKeyCode() == KeyEvent.KEYCODE_DPAD_RIGHT) {
                    if (keyEvent.getAction() == KeyEvent.ACTION_UP) {
                        if (counter<chn.infoText.size()-1) counter++;
                        setDialogText(chn,DateTime,counter);
                        return true;
                    }
                }
                dialog.dismiss();
                return false;
            }
        });

        dialog.show();

    }
}

when I press any button, the dialog closes, even if the onKey has been invoked. Did I miss something? how do I handle keypresses for my dialog only? (other dialogs may use same keys for different operation)

Upvotes: 0

Views: 112

Answers (1)

snachmsm
snachmsm

Reputation: 19233

well, inside InfoDialog you are setting DialogInterface.OnKeyListener and on the bottom of onKey method you are calling dialog.dismiss(), try to remove this line... (and also return true for any case)

Upvotes: 1

Related Questions