您的位置:首页 > 移动开发 > Android开发

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

2017-05-13 11:50 621 查看

问题概述

最近在做公司的测试程序,期间遇到在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,大家有需要的可以参考模仿一下,如果有不对的希望可以指出来,沟通最有利!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android