我有Activity
一个Fragment
。这个片段有一个按钮,当我按下硬件键盘上的“输入”按钮时,我想要发生一些事情(我正在使用adb keyevent
进行测试。)
我在stackoverflow上已经阅读了很多解决方案,但它们都没有工作。
这是我的片段代码:
btnPhoto = (Button) rootView.findViewById(R.id.taskBtnPhoto);
photoView = (ImageView) rootView.findViewById(R.id.taskPhotoView);
btnPhoto.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
takePhoto();
}
});
btnPhoto.setFocusable(true);
btnPhoto.setFocusableInTouchMode(true);
btnPhoto.requestFocus();
btnPhoto.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (KeyEvent.KEYCODE_VOLUME_UP == keyCode) {
doFoo();
return true;
}
return false;
}
});
此代码放在我片段的onCreateView
部分。使用debug,当我从ADB启动KeyEvent
或使用手机的硬件密钥(音量键)时,永远不会触发事件。
答案 0 :(得分:7)
public static class MyFragment extends Fragment {
@Override
public void onResume() {
super.onResume();
getView().setFocusableInTouchMode(true);
getView().requestFocus();
getView().setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
//YOUR CODE
return false;
}
});
}
}