由于只有Activity中才存在onKeyDown()方法监听,Fragment并不存在,那如何在Fragment中去监听遥控器的按键事件呢?这里我列出我使用的1种方法,供大家讨论一下,欢迎指正。
- 首先在BaseFragment实现自己需要的抽象方法
public abstract class BaseFragment extends Fragment { public abstract void onShow(); public abstract void requestFocus(); public abstract void clearFocus(); public boolean isFocus(){return getView().hasFocus();}; //这里的是我们的重点 public abstract boolean onKeyDown(KeyEvent event); }
- 在我们FragMent依赖的Activity中重写onKeyDown(),这里有2种方式进行控制按键,<1>:外部法先在Activity看是否要去响应该按键,再去Fragment进行判断。<2>:可以先在Framgent里面根据需要判断按键事件,再在Activity中进行判断,下面我列出第一种方式。
//环境在Activity中 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { boolean ret = false; ret = activityParseOnkey(keyCode); if (!ret) { ret = mCurFragment.onKeyDown(event); } return ret; } private boolean activityParseOnkey(int keyCode) { boolean ret = false; switch (keyCode) { case KeyEvent.KEYCODE_DPAD_RIGHT: if(需求){ ret =true; } break; case KeyEvent.KEYCODE_DPAD_LEFT: break; case KeyEvent.KEYCODE_DPAD_UP: break; case KeyEvent.KEYCODE_DPAD_DOWN: break; case KeyEvent.KEYCODE_BACK: break; } return ret; }
3.最后我们在看下Fragment里面的onkeyDown()方法:
@Override public boolean onKeyDown(KeyEvent event) { boolean ret = false; switch (event.getKeyCode()) { case KeyEvent.KEYCODE_DPAD_UP: break; case KeyEvent.KEYCODE_DPAD_DOWN: break; case KeyEvent.KEYCODE_DPAD_LEFT: break; case KeyEvent.KEYCODE_DPAD_RIGHT: break; case KeyEvent.KEYCODE_BACK: break; } return ret; }
本人也是小白一枚,很早就想写点什么东西,可是平时做的比较太零碎了,最大的问题也是怕误导大家。可还是忍不住分享点什么,毕竟跟大家索取的太多了。
转载请标明出处:Fragment的OnkeyDown处理方法
文章来源: Fragment的OnkeyDown处理方法