在Android中,onKeyListener未触发事件

5

我有一个包含一个FragmentActivity。这个片段有一个按钮,当我按下硬件键盘上的“enter”按钮时,我希望发生某些事情(我正在使用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或使用手机的硬件按键(音量键)时,事件从未触发。

1个回答

8
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;
                }
            });
        }
    }

请问您能否给这个解决方案添加更多细节? - Slash90ITA
好的,这个事件已经分发到我的Activity了,我需要在我的Fragment中处理这个事件。 - Slash90ITA
问题在于我没有以那种方式创建片段,而是使用Pager和类FragmentStatePagerAdapter。因此,我没有任何ID或标签来检索当前片段。我的片段是动态创建的。 - Slash90ITA

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接