Fragment 點擊事件的穿透和重疊bug


從A fragment跳轉到B fragment ,為了返回時不從新加載A fragment內容,通常使用add方法來將a添加到后退棧.

在B Fragment 中點擊一個空白區域,如果A Fragment的該位置正好有一個可以點擊的控件,則A Fragment會響應到點擊事件,更有甚者,如果B Fragment有時候還會和A Fragment重疊顯示到一起(B Fragment 透明).

其實兩個問題都好解決:

1.重疊顯示問題:只要在Fragment的布局文件根節點設置一下backgroud就可以可,除了trasparent外都可以使兩個fragment不在重疊顯示在一起。

2.點擊穿透到上一個fragment的問題:只要在Fragment中重寫onTouch方法(Fragment要實現OnTouchListener).返回true.

@Override
    public boolean onTouch(View v, MotionEvent event) {
        return true;
    }

Fragment是存在於Activity中的碎片,所以Fragment的onTouch有時候響應不到(沒驗證是否是有時候響應不到,也可能是永遠響應不到,全部被Activity給攔截掉了,如果是這樣,那么上面的點擊穿透解決方案就是完全無效的)。比較保守的解決方法就是再添加一步操作,在onCreateView方法的view 里面,給view添加上onTouchListener,這樣就能讓fragment點擊的時候不再穿透到上一層的Fragment中去了

    @Override  
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {  
            View view = inflater.inflate(R.layout.activity_bs_bookstore, null);  
            view.setOnTouchListener(this);  

 

可以在BaseFragment中去實現方法

public class BaseFragment extends Fragment implements OnTouchListener {
        @Override
    public boolean onTouch(View v, MotionEvent event) {
        return true;
    }
}

在子類中同

 view.setOnTouchListener(this);  

轉載地址:http://m.blog.csdn.NET/blog/z469441432/43053127


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM