【问题标题】:onKeyListener not firing an event in AndroidonKeyListener 未在 Android 中触发事件
【发布时间】:2015-07-13 11:35:35
【问题描述】:

我有一个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 部分。使用调试,当我从 ADB 启动 KeyEvent 或使用手机的硬件键(音量键)时,该事件永远不会触发。

【问题讨论】:

    标签: java android events android-fragments


    【解决方案1】:
    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;
                    }
                });
            }
        }
    

    【讨论】:

    • 您能否在此解决方案中添加更多详细信息?
    • 确定这个派发事件到我的活动,我需要我的片段上的事件。
    • 问题是我没有以这种方式创建片段,但我正在使用 Pager 和 FragmentStatePagerAdapter 类。所以我没有任何 id 或标签来检索当前片段。我的片段是动态创建的
    猜你喜欢
    • 2017-12-17
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    • 1970-01-01
    相关资源
    最近更新 更多