Android fragment多層疊加時出現點選穿透
阿新 • • 發佈:2019-10-03
/**
* 防止點選穿透
* @param view
* @param savedInstanceState
*/
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
// 攔截觸控事件,防止洩露下去
view.setOnTouchListener(this);
}
完整的baseFragment:
public abstract class BaseFragment extends Fragment implements View.OnTouchListener {
/**
* 貼附的activity
*/
protected FragmentActivity mActivity;
/**
* 根view
*/
protected View mRootView;
/**
* 是否對使用者可見
*/
protected boolean mIsVisible;
/**
* 是否載入完成
* 當執行完oncreatview,View的初始化方法後方法後即為true
*/
protected boolean mIsPrepare;
@Override
public void onAttach(Context context) {
super.onAttach(context);
mActivity = (FragmentActivity) getActivity();
}
public void startToFragment(Context context, int container, Fragment newFragment){
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(container,newFragment);
transaction.addToBackStack(context.getClass().getName());
transaction.commit();
}
@Override
@Nullable
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
mRootView = inflater.inflate(setLayoutResouceId(), container, false);
initData(getArguments());
initView();
mIsPrepare = true;
onLazyLoad();
setListener();
return mRootView;
}
/**
* 初始化資料
*
* @param arguments 接收到的從其他地方傳遞過來的引數
* @author 漆可
* @date 2016-5-26 下午3:57:48
*/
protected void initData(Bundle arguments) {
}
/**
* 初始化View
*
* @author 漆可
* @date 2016-5-26 下午3:58:49
*/
protected void initView() {
}
/**
* 設定監聽事件
*
* @author 漆可
* @date 2016-5-26 下午3:59:36
*/
protected void setListener() {
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
this.mIsVisible = isVisibleToUser;
if (isVisibleToUser) {
onVisibleToUser();
}
}
/**
* 使用者可見時執行的操作
*
* @author 漆可
* @date 2016-5-26 下午4:09:39
*/
protected void onVisibleToUser() {
if (mIsPrepare && mIsVisible) {
onLazyLoad();
}
}
/**
* 懶載入,僅當用戶可見切view初始化結束後才會執行
*
* @author 漆可
* @date 2016-5-26 下午4:10:20
*/
protected void onLazyLoad() {
}
@SuppressWarnings("unchecked")
protected <T extends View> T findViewById(int id) {
if (mRootView == null) {
return null;
}
return (T) mRootView.findViewById(id);
}
/**
* 設定根佈局資源id
*
* @return
* @author 漆可
* @date 2016-5-26 下午3:57:09
*/
protected abstract int setLayoutResouceId();
/**
* 防止點選穿透
* @param view
* @param savedInstanceState
*/
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
// 攔截觸控事件,防止洩露下去
view.setOnTouchListener(this);
}
@Override
public boolean onTouch(View v, MotionEvent event) {
return true;