>

Fragment에서 작동하는 제스처를 위로 스 와이프하려고합니다. 활동과 마찬가지로 잘 작동합니다. 조각에서 dispatchTouchEvent에 문제가 있습니다. Fragment에서 dispatchTouchEvent를 어떻게 사용합니까? 이것을 달성하는 동등한 방법이 있습니까?

@Override
    public boolean dispatchTouchEvent(MotionEvent me)
    {
         this.detector.onTouchEvent(me);
       return super.dispatchTouchEvent(me);
    }


  • 답변 # 1

    스 와이프를 감지/처리하는 것이 목표라면,보기를 만든 후 조각의보기에 터치 이벤트 리스너를 추가하십시오.

  • 답변 # 2

    활동을 바꾸지 않고 조각이 활동에 첨부됩니다. 따라서 여전히 조각 부모 활동에서 dispatchTouchEvent를 재정의하고 거기에서 모든 조치를 전달할 수 있습니다.

    예 :

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        MyFragment myFragment = (MyFragment) getFragmentManager().findFragmentByTag("MY_FRAGMENT_TAG");
        myFragment.doSomething();
        return super.dispatchTouchEvent(ev);
    }
    
    

  • 답변 # 3

    이러한 부모 활동에서 TouchEvent를 전달해야합니다. 이 활동을 부모 활동에 추가하십시오 :

    private List<MyOnTouchListener> onTouchListeners;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        if(onTouchListeners==null)
        {
            onTouchListeners=new ArrayList<>();
        }
    }
    public void registerMyOnTouchListener(MyOnTouchListener listener){
        onTouchListeners.add(listener);
    }
    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        for(MyOnTouchListener listener:onTouchListeners)
            listener.onTouch(ev);
        return super.dispatchTouchEvent(ev);
    }
    public interface MyOnTouchListener {
        public void onTouch(MotionEvent ev);
    }
    
    

    OnSwipeTouchListener :

    public class OnSwipeTouchListener{
    private final GestureDetector gestureDetector;
    public OnSwipeTouchListener (Context ctx){
        gestureDetector = new GestureDetector(ctx, new GestureListener());
    }
    private final class GestureListener extends SimpleOnGestureListener {
         //override touch methode like ondown ... 
         //and call the impelinfragment()
    }
    public void impelinfragment(){
     //this method impelment in fragment
    }
    //by calling this mehod pass touch to detector
    public void onTouch( MotionEvent event) {
         gestureDetector.onTouchEvent(event);
    }
    
    

    터치하기를 원하는 조각에이 코드를 추가하십시오 :

    //ontouch listenr
    MainActivity.MyOnTouchListener onTouchListener;
    private OnSwipeTouchListener touchListener=new OnSwipeTouchListener(getActivity()) {
        public void impelinfragment(){
     //do what you want:D
    }
    };
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setting for on touch listener
        ((MainActivity)getActivity()).registerMyOnTouchListener(new MainActivity.MyOnTouchListener() {
            @Override
            public void onTouch(MotionEvent ev) {
                LocalUtil.showToast("i got it ");
                touchListener.onTouch(ev);
            }
        });
    }
    
    

    이 방법을 사용하여 rax 답변과 달리 페이지의 다른 요소와 충돌하지 않고 조각으로 오른쪽 또는 왼쪽으로 모든 스 와이프 이벤트를 가져옵니다.

  • 이전 c# - 상태 코드가있는 ASPNET Core 반환 JSON
  • 다음 기존 자식 저장소에서 Netbeans 7 프로젝트를 만드는 방법은 무엇입니까?