美文网首页
Fragment中的事件处理

Fragment中的事件处理

作者: Endeav0r | 来源:发表于2018-04-24 09:30 被阅读56次
Fragment中没有onTouch方法,如何处理?

在Activity中添加如下代码:

public interface MyTouchListener {
    void onTouchEvent(MotionEvent event);
}

// 保存MyTouchListener接口的列表
private List<MyTouchListener> myTouchListeners = new ArrayList<>();

/**
 * 提供给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) {
    for (MyTouchListener listener : myTouchListeners) {
        listener.onTouchEvent(ev);
    }
    return super.dispatchTouchEvent(ev);
}

在Fragment中添加如下代码:

 // 将myTouchListener注册到分发列表
getActivity()).registerMyTouchListener(myTouchListener);
Activity.MyTouchListener myTouchListener = new Activity.MyTouchListener() {
    @Override
    public void onTouchEvent(MotionEvent event) {
        ...
    }
};

这样当有touchEvent发生时,MainActivity就会调用dispatchTouchEvent,dispatchTouchEvent接着对每一个注册的对象调用其onTouchEvent函数,也就是myTouchListener中实现的方法,这样Fragment里面就等于实现了onTouchEvent函数,只需要在函数体内实现处理的事件。

Fragment中没有onBackPressed方法,如何处理?

在Activity中:

@Override
public void onBackPressed() {
    if (!FragmentUtils.dispatchBackPress(getSupportFragmentManager())) {
        super.onBackPressed();
    }
}

在Fragment中:

Fragment implements FragmentUtils.OnBackClickListener{
    ...
    @Override
    public boolean onBackClick() {
        TostUtil.show("onBackClick");
        if (mKeyBoardLayout.getVisibility() == View.VISIBLE) {
            hideKeyboard();
            return true; // true已经消耗了事件
        } else {
            return false;
        }

    }
}

参阅:

android Fragment中没有onTouchEvent解决方法

Fragment 点击事件的穿透和重叠bug

相关文章

网友评论

      本文标题:Fragment中的事件处理

      本文链接:https://www.haomeiwen.com/subject/qhydlftx.html