java 叠加层_Android fragment多层叠加时出现点击穿透

多层fragment叠加时,点击上层fragment会使下层fragment的控件对应点击事件响应,这种现象就是点击穿透。对于这种情况,我们一般都是对baseFragment进行view的点击事件设置,以达到拦截所有页面上的空白处点击事件,以防止穿透到下层fragment。

/**

* 防止点击穿透

* @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 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;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值