当前位置: 代码迷 >> Android >> Android back 事件监听,该怎么处理
  详细解决方案

Android back 事件监听,该怎么处理

热度:94   发布时间:2016-05-01 21:40:21.0
Android back 事件监听
一些类的信息:
public class Maze3DActivity extends Activity;
class GLGameView extends GLSurfaceView;
其中glgameView 是 Maze3DActivity 调用的一个View。
当然Maze3DActivity 还包括其他的View
问题描述:
在glgameView中重写了 OnkeyDown()方法。但是
情形1:当只是触摸屏幕或者无任何操作,紧接着按虚拟机上的back键 就会直接终止整个程序 。
情形2:如果按了虚拟机上的键盘或者物理键盘,接着按back键,竟然能够实现指定的功能,也就是说事件可以捕获。

重写的代码:
public onKeyDown()
case KeyEvent.KEYCODE_BACK: // 如果按下返回键
 if(event.getRepeatCount() == 0) {
event.startTracking();
return true;
 }

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
// TODO Auto-generated method stub
Log.i("BACK", "DISPATCHkEYeVENT");
return super.dispatchKeyEvent(event);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if(keyCode == KeyEvent.KEYCODE_BACK && event.isTracking()
&& !event.isCanceled()) {
activity.hd.sendEmptyMessage(GAME_MENU);
return true;
}
return super.onKeyUp(keyCode, event);
}

补充说明:
在 情形1 下onkeydown、onkeyup,dispatchKeyEvent 这几个方法都没有进入。我尝试着在activity中重写onKeyDown()的方法,不过依然是无法捕获glgameView 中back 事件。 于是我又在activity中重写了onBackPressed()方法,这个倒是可以捕获任何一种情形的事件,但是这个方法一个参数都没有,我根本就不知道是从哪个view中按back键的。

------解决方案--------------------
自己判断哪个view有焦点呗
------解决方案--------------------
View收不到Back事件。
在你的Activity
public onKeyDown()
case KeyEvent.KEYCODE_BACK: // 如果按下返回键
 WhichView.OnBack();//这里添加想监听回退键的View
return true;
 }
  相关解决方案