1. 程式人生 > >Fragment 顯示隱藏回撥

Fragment 顯示隱藏回撥

今天來說一下Fragment的顯示隱藏的回撥 和 如何拿到當前activity 正在顯示的Fragment物件;

fragment顯示隱藏無非兩種控制方式:
1.在viewpager 中顯示左右滑動顯示隱藏;
2.利用FragmentTransation 的show 和 hide顯示隱藏;

1.在viewpager中顯示:

新建一個BaseFragment,在BaseFragment 中新增以下程式碼就可以實現:

    //標記需要等待回撥onMyResume;
    private boolean isWaitingForOnMyResume = false;

 @Override
public void onResume() { super.onResume(); if (isWaitingForOnMyResume) { isWaitingForOnMyResume = false; onMyResume(); } } @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); Logger.d(TAG, "setUserVisibleHint"
+ toString() + "; isVisibleToUser:" + isVisibleToUser); if (isVisibleToUser) { if (isResumed()) { onMyResume(); } else { isWaitingForOnMyResume = true; } } else { if (isResumed()) onMyPause(); } } /** * viewPager中介面每次可見呼叫; */
public void onMyResume() { mBaseActivity.currentShowingFragment = this;//在BaseActivity 中維護的一個變數,表示當前Activity 顯示的Fragment(viewpager 中滑動 方式); Log.d(TAG, "onMyResume" ); } /** * viewPager中介面每次不可見呼叫; */ public void onMyPause() { Log.d(TAG, "onMyPause" ); }

2.手動呼叫show hide顯示:

依然在BaseFragment 中新增以下程式碼就可以實現: (這個比較簡單。但是這種方式有個問題是: 第一次show的時候 不會呼叫onMyShow(); 大家儘管發揮 完善這個問題;)


    @Override
    public void onHiddenChanged(boolean hidden) {
        super.onHiddenChanged(hidden);
        if (hidden) {
            onMyHide();
        } else {
            onMyShow();
        }
    }

    // FragmentTransaction 呼叫show 回撥
    protected void onMyShow() {
        Log.d(TAG, "onMyShow");
         mBaseActivity.currentShowingFragment2 = this;//在BaseActivity 中維護的一個變數,表示當前Activity 顯示的Fragment (hide show 方式);
    }

    // FragmentTransaction 呼叫hide 回撥
    protected void onMyHide() {
        Log.d(TAG, "onMyHide");
    }