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");
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值