android fragment 中怎么处理按键事件dispatchkeyevent

 我来答
姚瑶002
2015-05-30 · TA获得超过332个赞
知道小有建树答主
回答量:105
采纳率:0%
帮助的人:76.9万
展开全部
fragment里不能写dispatchkeyevent
可以在启动fragment的activity里写一个回调方法

public interface MyTouchListener
{
public void onTouchEvent(MotionEvent event);
}
/*
* 保存MyTouchListener接口的列表
*/
private ArrayList<MyTouchListener> myTouchListeners = new ArrayList<MyActivity.MyTouchListener>();

/**
* 提供给Fragment通过getActivity()方法来注册自己的触摸事件的方法
* @param listener
*/
public void registerMyTouchListener(MyTouchListener listener)
{
myTouchListeners.add(listener);
}

/**
* 提供给Fragment通过getActivity()方法来取消注册自己的触摸事件的方法
* @param listener
*/
public void unRegisterMyTouchListener(MyTouchListener listener)
{
myTouchListeners.remove(listener);
}

/**
* 分发触摸事件给所有注册了MyTouchListener的接口
*/
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
// TODO Auto-generated method stub
for (MyTouchListener listener : myTouchListeners) {
listener.onTouchEvent(ev);
}
return super.dispatchTouchEvent(ev);

}

然后在fragment中注册使用这个方法
/**
* Fragment中,注册
* 接收ChatActivity的Touch回调的对象
* 重写其中的onTouchEvent函数,并进行该Fragment的逻辑处理
*/
private MyActivity.MyTouchListener mTouchListener = new ChatActivity.MyTouchListener() {
@Override
public void onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
//逻辑处理
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
if (vTracker == null) {
vTracker = VelocityTracker.obtain();
} else {
vTracker.clear();
}
vTracker.addMovement(event);
break;
case MotionEvent.ACTION_MOVE:
vTracker.addMovement(event);

break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
try{
vTracker.recycle();
}catch (Exception e){
e.printStackTrace();
}

break;
}
}
};

注意,要在fragment的onAttach方法中注册回调
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
//在该Fragment的构造函数中注册mTouchListener的回调
if(mTouchListener!=null){
if(getActivity()!=null){
((MyActivity)getActivity()).registerMyTouchListener(mTouchListener);
}
}
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
金山毒霸
2024-10-31 广告
大部分系统错误,是因为某些DLL文件丢失造成的,比如未安装DirectX9或DirectX 9.0组件已损坏、缺少Visual C ++库、未安装.net库。解决方法如下:一、 手动解决方法1、先确定电脑操作系统是多少位的,现在的电脑一般都... 点击进入详情页
本回答由金山毒霸提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式