为了账号安全,请及时绑定邮箱和手机立即绑定

片段onResume从后堆栈

片段onResume从后堆栈

摇曳的蔷薇 2019-12-17 09:42:49
我正在使用兼容性包在Android 2.2上使用Fragments。使用片段并将片段之间的过渡添加到后台时,我想实现活动的onResume相同的行为,即,每当片段从弹出窗口中移到“前景”(用户可见)时,回栈,我想在片段中激活某种回调(例如,对共享UI资源执行某些更改)。我看到片段框架中没有内置的回调。为了达到这个目的,有什么好的做法吗?
查看完整描述

3 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

由于缺少更好的解决方案,我为我准备了这个工作:假设我有1个活动(MyActivity),并且相互替换的片段很少(一次只能看到一个)。


在MyActivity中,添加以下侦听器:


getSupportFragmentManager().addOnBackStackChangedListener(getListener());

(如您所见,我正在使用兼容性包)。


getListener实现:


private OnBackStackChangedListener getListener()

    {

        OnBackStackChangedListener result = new OnBackStackChangedListener()

        {

            public void onBackStackChanged() 

            {                   

                FragmentManager manager = getSupportFragmentManager();


                if (manager != null)

                {

                    MyFragment currFrag = (MyFragment) manager.findFragmentById(R.id.fragmentItem);


                    currFrag.onFragmentResume();

                }                   

            }

        };


        return result;

    }

MyFragment.onFragmentResume()按下“返回”后将被调用。一些注意事项:


假设您已将所有交易添加到后台(使用 FragmentTransaction.addToBackStack())

每次更改堆栈时都会激活它(您可以将其他内容存储在后堆栈中,例如动画),因此您可能会收到同一片段实例的多个调用。


查看完整回答
反对 回复 2019-12-17
?
皈依舞

TA贡献1851条经验 获得超3个赞

我对建议的解决方案做了一些更改。这样对我更好地工作:


private OnBackStackChangedListener getListener() {

    OnBackStackChangedListener result = new OnBackStackChangedListener() {

        public void onBackStackChanged() {

            FragmentManager manager = getSupportFragmentManager();

            if (manager != null) {

                int backStackEntryCount = manager.getBackStackEntryCount();

                if (backStackEntryCount == 0) {

                    finish();

                }

                Fragment fragment = manager.getFragments()

                                           .get(backStackEntryCount - 1);

                fragment.onResume();

            }

        }

    };

    return result;

}


查看完整回答
反对 回复 2019-12-17
?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

Android Developers的以下部分介绍了一种通信机制,该机制创建活动的事件回调。引用其中的一行:


做到这一点的一种好方法是在片段内定义一个回调接口,并要求主机活动实现它。当活动通过接口收到回调时,它可以根据需要与布局中的其他片段共享信息。


编辑: 该片段有一个onStart(...)当用户可见该片段时调用的。同样,onResume(...)当可见且正在运行时。这些与他们的活动对应物相关。简而言之:使用onResume()


查看完整回答
反对 回复 2019-12-17
  • 3 回答
  • 0 关注
  • 429 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信