轉載於 : http://blog.csdn.net/kfuxydnod6/article/details/46906283
本人在做項目的過程中遇到的這個問題,然後就在網上百度了一下,之後也是在csdn上看到博友發過此類問題的解決辦法,所以特此重新總結一下,順便也給自己提個醒,避免出現此類問題。好!下面我們說一下問題:
舉例:當我們建立一個fragment A的時候需要點擊跳轉到fragment B中,爲了返回時不重新加載fragment A所以我們會使用add的方法來講fragment A加入到後退棧中。
當在fragment B中點擊一個空白區域,恰好空白區域相對應的位置在fragment A中有相應的控件,則fragment A會響應到點擊事件,有的時候還是fragmentB和fragment A重疊到一起顯示(fragmentB透明)
下面解決重疊到一起的問題:
只要在fragment的佈局文件的根節點設置一下background就可以了,除了trasparent外都可以使兩個fragment不在重疊顯示到一起了。
下面一個點擊能穿透的問題:
只要我們在fragment中重寫View.OnTouchListener的OnTouch方法(當然fragment要實現OnTouchListener監聽),將返回值設置爲true;
- @Override
- public boolean onTouch(View v, MotionEvent event) {
- return true;
- }
Fragment是存在於Activity的碎片,所以Fragment的onTouch的方法有時候不能完全的響應到或者根本就不可能響應到,全部讓Activity給攔截掉了,如果這樣,我們有一種比較保守的解決方法,就是再添加一步操作,在onCreateView方法中的view裏面添加OnTouchListener,這樣就能讓fragment點擊的時候不再穿透到上一層的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);
-
}