TV端定义一个dialog, 监听返回键监听setOnKeyListener 按下返回键, 会执行两次。。。

使用场景:我的项目中登录完成之后,需要弹出一个dialog让用户完善信息,如果中途用户不想填写信息了(TV端操作比较不方便),按下返回键,在弹出一个提示dialog,提示用户是否退出,问题出在这里 ,按下返回键,会初始化两个提示dialog。

原因: Android一次单击操作定义了两个事件,ACTION_DOWN和ACTION_UP,即按下和松手两个动作。
需要添加判断 if(event.getAction()==KeyEvent.ACTION_DOWN)或者if(event.getAction()==KeyEvent.ACTION_UP)

完整判断:

       mDialog.setOnKeyListener(new DialogInterface.OnKeyListener() {
            @Override
            public boolean onKey(DialogInterface dialogInterface, int i, KeyEvent keyEvent) {
                if (i==KeyEvent.KEYCODE_BACK&&keyEvent.getAction()==KeyEvent.ACTION_DOWN){
                    warningsDialog = new WarningsDialog(mContext);
                    warningsDialog.setOnSureClick(new WarningsDialog.OnSureClick() {
                        @Override
                        public void OnSureClickListener() {
                            warningsDialog.dismiss();
                            mDialog.dismiss();
                        }
                    });
                    warningsDialog.show();
                    return false;
                }else {
                    return true;
                }
            }
        });

提示:mDialog是我完善信息的dialog,WarningsDialog是我的提示dialog。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,那么你可以重写`onKeyDown`方法来实现使用方向选择需要点击的按钮。具体实现步骤如下: 1. 在Dialog对话框的创建代码中,使用`setCancelable(false)`方法来禁止用户通过点击对话框外部来取消对话框。 2. 在Dialog的布局文件中,给需要被选择的按钮添加`android:focusable="true"`和`android:focusableInTouchMode="true"`属性,使其可以被选中。 3. 重写对话框的`onKeyDown`方法,通过判断按码来执行相应的操作。例如,如果用户按下了上下左右,可以通过`findFocus`方法来找到当前被选中的按钮,再通过`focusSearch`方法来找到下一个需要被选中的按钮,并将其设置为选中状态。 下面是一个简单的示例代码: ```java public class CustomDialog extends Dialog { public CustomDialog(@NonNull Context context) { super(context); setCancelable(false); // 禁止用户通过点击对话框外部来取消对话框 } @Override public boolean onKeyDown(int keyCode, @NonNull KeyEvent event) { View currentFocus = getCurrentFocus(); if (currentFocus != null) { View nextFocus = null; switch (keyCode) { case KeyEvent.KEYCODE_DPAD_UP: nextFocus = currentFocus.focusSearch(View.FOCUS_UP); break; case KeyEvent.KEYCODE_DPAD_DOWN: nextFocus = currentFocus.focusSearch(View.FOCUS_DOWN); break; case KeyEvent.KEYCODE_DPAD_LEFT: nextFocus = currentFocus.focusSearch(View.FOCUS_LEFT); break; case KeyEvent.KEYCODE_DPAD_RIGHT: nextFocus = currentFocus.focusSearch(View.FOCUS_RIGHT); break; } if (nextFocus != null) { nextFocus.requestFocus(); return true; } } return super.onKeyDown(keyCode, event); } } ``` 在创建CustomDialog对象后,用户可以通过方向来选择需要被点击的按钮。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值