Fragment 点击穿透 解决办法


在做项目,用activity+fragment 填充视图时,

发现有些Fragment会存在点击穿透效果(就是底层的Fragment可以响应上层的触摸以及点击事件)

但是当填充的Fragment的跟布局是ScrollView时就不会有这种现象。


比如:当我们建立一个fragment A的时候需要点击跳转到fragment B中,为了返回时不重新加载fragment A所以我们会使用add的方法来讲fragment A加入到后退栈中

当在fragment B中点击一个空白区域,恰好空白区域相对应的位置在fragment A中有相应的控件,则fragment A会响应到点击事件,如果是列表 还可以滑动。



简单百度一下,还有不少同胞遇到这种问题。并且大致的解决办法是:

在fragment中实现OnTouchListener监听,然后重写View.OnTouchListener的OnTouch方法,将返回值设置为true;在onCreateView方法中的view里面添加OnTouchListener,这样就能让fragment点击的时候不再穿透到上一层的fragment中去了,直接在当前的fragment层给消化掉了。


好麻烦不推荐,其实只要在onCreateView方法返回view时,让其view.setClickable(true);就可以了


/**
 * Fragment基类
 * 
 * @author shaoshuai
 * 
 */

public abstract class BaseFragment extends Fragment {
	public View view;
	public Context mContext;
	public FragmentManager fm;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		this.mContext = getActivity();
		fm = getFragmentManager();
	}

	/**
	 * 构建UI,
	 */
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
		view = initView(inflater);
		view.setClickable(true);// 防止点击穿透,底层的fragment响应上层点击触摸事件
		return view;
	}

	/**
	 * 数据填充UI的操作
	 */
	@Override
	public void onActivityCreated(Bundle savedInstanceState) {
		initData(savedInstanceState);
		super.onActivityCreated(savedInstanceState);
	}

	/**
	 * onCreate方法中构建UI(将xml转换成view对象)
	 * 
	 * @param inflater
	 * @return
	 */
	public abstract View initView(LayoutInflater inflater);

	/**
	 * onActivityCreated方法中请求网络。返回数据填充UI
	 * 
	 * @param savedInstanceState
	 */
	public abstract void initData(Bundle savedInstanceState);

}






  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值