我正试图向上滑动并向下滑动处理Fragment的手势。 这同样适用于活动。在Fragment上我遇到了dispatchTouchEvent的问题。我如何在Fragment中调度触发事件?是否有相同的方法实现这一目标?
@Override
public boolean dispatchTouchEvent(MotionEvent me)
{
this.detector.onTouchEvent(me);
return super.dispatchTouchEvent(me);
}
答案 0 :(得分:4)
如果您的目标是检测/处理滑动,请在创建视图后在片段的视图中添加触摸事件侦听器。
答案 1 :(得分:4)
碎片附加到活动,而不是替换活动。因此,您仍然可以在片段父活动中覆盖dispatchTouchEvent,并从那里传递任何操作。
例如:
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
MyFragment myFragment = (MyFragment) getFragmentManager().findFragmentByTag("MY_FRAGMENT_TAG");
myFragment.doSomething();
return super.dispatchTouchEvent(ev);
}
答案 2 :(得分:4)
您必须在父活动中发送dispatchTouchEvent 将此代码添加到父活动:
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);
}
});
}
我使用此方法在片段中获取所有向右或向左滑动的事件,而不与页面中的其他元素冲突.unlike rax answer