안드로이드 프래그먼트에서 키 이벤트 디스패치키이벤트를 처리하는 방법
DispatchKeyEvent는 프래그먼트에 작성할 수 없습니다.
프래그먼트를 시작하는 액티비티에 콜백 메서드를 작성할 수 있습니다.
공개 인터페이스 MyTouchListener
{ p>
public void onTouchEvent(MotionEvent event);
}
/*
* MyTouchListener 인터페이스 목록 저장
*/
private ArrayList
/**
* 제공 대상 getActivity( ) 메소드를 통해 조각화하여 자체 터치 이벤트 등록
* @param 리스너
*/
public void RegisterMyTouchListener(MyTouchListener 리스너)
{
myTouchListeners.add(listener);
}
/**
* getActivity(를 통해 Fragment에 제공됨 ) 메소드 자체 터치 이벤트 등록을 취소하는 메소드
* @param 리스너
*/
public void unRegisterMyTouchListener(MyTouchListener 리스너)
{
myTouchListeners.remove(listener);
}
/**
* 등록된 모든 MyTouchListeners 인터페이스에 터치 이벤트를 배포합니다
*/
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
// TODO 자동 생성 메서드 스텁
for (MyTouchListener 리스너 : myTouchListeners) {
Listener.onTouchEvent(ev);
}
return super.dispatchTouchEvent(ev) ;
}
그런 다음 프래그먼트에 등록하고 이 방법을 사용하세요
/**
* 프래그먼트에 등록하세요
* ChatActivity의 Touch 콜백을 수신하는 객체
* onTouchEvent 함수를 다시 작성하고 Fragment의 논리적 처리를 수행합니다.
*/
private MyActivity.MyTouchListener mTouchListener = new ChatActivity.MyTouchListener() {
@Override
pub
lic void onTouchEvent(MotionEvent event) {
// TODO 자동 생성된 메소드 스텁
//논리 처리
int action = event.getAction();
스위치(작업) {
case MotionEvent.ACTION_DOWN:
if (vTracker == null) {
vTracker = VelocityTracker. acquire();
} else {
vTracker.clear();
}
vTracker.addMovement(event);
중단;
사례 MotionEvent.ACTION_MOVE:
vTracker.addMovement(event);
중단;
Case MotionEvent.ACTION_UP:
Case MotionEvent.ACTION_CANCEL:
try{
vTracker.recycle();
}catch(예외 e){
e.printStackTrace();
}
break;
}
}
};
콜백은 프래그먼트의 onAttach 메소드에 등록되어야 합니다.
@Override
public void onAttach(Activity Activity) {
super.onAttach(activity);
//조각 생성자에 mTouchListener 콜백 등록
if(mTouchListener!=null){
if(getActivity()!=null){
((MyActivity)getActivity()).registerMyTouchListener(mTouchListener);
}
< 피> }}