android 之Fragment 没有onKeyDown 监听与editText 输入后焦点问题

问题概述

最近在做公司的测试程序,期间遇到在fragment 里不能监听到按键信息(公司硬件不是纯安卓手机,是PDA,有30个按键)

解决过程

(一)

先在Fragment里写个自己的静态onKeyDown (实际上不静态也可),再从Activity 里的onKeyDown 里用Fragment 传进来,这个方法可行,但是如果你的Fragment 里的onKeyDown还要做其他处理就不行了,因为当按键传进来的时候Fragment 里很多数据没有初始化,造成了很多空指针的麻烦,所以这个方法放弃了。。

(二)

网上找的一个获取焦点的方法可行,具体看下代码

private void getFocus() {
        getView().setFocusable(true);
        getView().setFocusableInTouchMode(true);
        getView().requestFocus();
        getView().setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                if (keyCode == 139) {
                    if (event.getRepeatCount() == 0) {
                        Log.e(TAG, "onKey: ");
                        read();
                        return true;
                    }
                }
                return false;
            }
        });
    }

通过这个获取后就可触发fragment 里的其他数据处理,同时又有一个问题是每次按下这个139按键会执行两次这个getFocus()方法,至今没找到原因(有没有大神帮忙解释下),只能用奇偶来执行那个read();方法了。到这里fragment 的按键监听算是搞定了,其中还一个小插曲就是期间如果这个fragment 里有editText 要编辑的话就会抢走焦点,其实很好办,就是重新获取一下就好了,下面贴个代码

et_interval_15693_read.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                Log.e(TAG, "onTextChanged:  监听到et输入 " );
                getFocus();
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });

这几个重写的方法就不介绍了,自己BD一下就可。目前没发现bug,大家有需要的可以参考模仿一下,如果有不对的希望可以指出来,沟通最有利!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值