由于只有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);
}
2.在我们FragMent依赖的Activity中重写onKeyDown(),这里有2种方式进行控制按键,<1>外部法:先在Activity看是否要去响应该按键,响应就返回true,否则不操作;再去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); //这里的mCurFragment是我们前的Fragment
}
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;
}
本人也是小白一枚,很早就想写点什么东西,可是平时笔记比较太零碎了,最大的问题也是怕误导大家。可还是忍不住分享点什么,毕竟跟大家索取的太多了。