Android中的OnKeyListener未在Fragment中触发事件(Volume键)

时间:2017-07-12 15:09:12

标签: android android-fragments keylistener

我在片段中有一个Android应用程序,我正在尝试按下音量键事件,但事件不会触发。

我尝试在onKey()方法中设置断点,它从未到过那里。

以下代码: -

import android.view.View.OnKeyListener;
 public class ExampleFragment extends Fragment implements OnKeyListener {
     @Override
     public boolean onKey(View v, int keyCode, KeyEvent event) {
         if ((keyCode == KeyEvent.KEYCODE_VOLUME_DOWN)){
             //to do code goes in here
             return true;
         }
         return false;
     }
}

2 个答案:

答案 0 :(得分:0)

您尚未将 Year Month Day Hour Minutes Reading 0 2011 1 1 0 0 1.6 1 2011 1 1 1 0 1.1 设置为Fragment任何内容。需要注册KeyListener才能提交View

KeyEvent中,尝试以下内容:

Fragment

在理想的世界中,@Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { // Create an EditText we want to Listen to. EditText e = new EditText(getActivity()); // Assert this Fragment was the KeyListener. e.setOnKeyListener(this); // Return the View. return e; } 不应该对收听 Button负责。它应该只处理点击和按下,因为这是KeyEvent在现实世界中的表现。通常,您应该避免提供任何类型的图形对象特定于应用程序的知识,应该由应用程序决定要做什么,并相应地更新UI。

这种架构通常以Model View Controller的形式出现。

相反,您可能希望尝试覆盖Button拥有onKeyDown中的Fragment,并将其路由到Activity中的相应方法。

请参阅此example

答案 1 :(得分:0)

我遇到了同样的问题。在我的例子中,onKeyListener在一个片段中正常工作,但它在另一个片段中不起作用。我发现它取决于键盘的类型。 我已经设置了EditText inputType =" text"它开始起作用了。这是一个奇迹。我真的无法理解发生了什么。在我的情况下,问题出现在华为,genymotion错误没有出现。

   <EditText
    android:id="@+id/answer"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:inputType="text"
    />