安卓碎片管理器碎片变化监听器

15

在使用FragmentManager替换片段时,是否可以添加监听器以便在事件完成时收到通知?

因此

myFragmentManager
            .beginTransaction()
            .replace(R.id.fragmentContainer, fragment, FRAGMENT_TAG)
            .commit()

我可以给myFragmentManager添加监听器,以便我知道何时替换了片段吗?

3个回答

27

FragmentManager(android.support.v4.app.FragmentManager)有一个很好的方法叫做registerFragmentLifecycleCallbacks,它可以帮助注册一个FragmentManager.FragmentLifecycleCallbacks。这允许我们在片段的生命周期过程中采取行动。你可以在onFragmentCreated()中进行任何你想要的操作。

FragmentManager fragmentManager =  getSupportFragmentManager();
        fragmentManager.registerFragmentLifecycleCallbacks(new FragmentManager.FragmentLifecycleCallbacks() {
            @Override
            public void onFragmentPreAttached(FragmentManager fm, Fragment f, Context context) {
                super.onFragmentPreAttached(fm, f, context);
                Log.v("FragXX1", f.getTag());
            }

            @Override
            public void onFragmentAttached(FragmentManager fm, Fragment f, Context context) {
                super.onFragmentAttached(fm, f, context);
                Log.v("FragXX2", f.getTag());
            }

            @Override
            public void onFragmentCreated(FragmentManager fm, Fragment f, Bundle savedInstanceState) {
                super.onFragmentCreated(fm, f, savedInstanceState);
                Log.v("FragXX3", f.getTag());
            }

            @Override
            public void onFragmentActivityCreated(FragmentManager fm, Fragment f, Bundle savedInstanceState) {
                super.onFragmentActivityCreated(fm, f, savedInstanceState);
                Log.v("FragXX4", f.getTag());
            }

            @Override
            public void onFragmentViewCreated(FragmentManager fm, Fragment f, View v, Bundle savedInstanceState) {
                super.onFragmentViewCreated(fm, f, v, savedInstanceState);
                Log.v("FragXX5", f.getTag());
            }

            @Override
            public void onFragmentStarted(FragmentManager fm, Fragment f) {
                super.onFragmentStarted(fm, f);
                Log.v("FragXX6", f.getTag());
            }

            @Override
            public void onFragmentResumed(FragmentManager fm, Fragment f) {
                super.onFragmentResumed(fm, f);
                Log.v("FragXX7", f.getTag());
            }

            @Override
            public void onFragmentPaused(FragmentManager fm, Fragment f) {
                super.onFragmentPaused(fm, f);
                Log.v("FragXX8", f.getTag());
            }

            @Override
            public void onFragmentStopped(FragmentManager fm, Fragment f) {
                super.onFragmentStopped(fm, f);
                Log.v("FragXX9", f.getTag());
            }

            @Override
            public void onFragmentSaveInstanceState(FragmentManager fm, Fragment f, Bundle outState) {
                super.onFragmentSaveInstanceState(fm, f, outState);
                Log.v("FragXX10", f.getTag());
            }

            @Override
            public void onFragmentViewDestroyed(FragmentManager fm, Fragment f) {
                super.onFragmentViewDestroyed(fm, f);
                Log.v("FragXX11", f.getTag());
            }

            @Override
            public void onFragmentDestroyed(FragmentManager fm, Fragment f) {
                super.onFragmentDestroyed(fm, f);
                Log.v("FragXX12", f.getTag());
            }

            @Override
            public void onFragmentDetached(FragmentManager fm, Fragment f) {
                super.onFragmentDetached(fm, f);
                Log.v("FragXX13", f.getTag());
            }
        }, true);

        FragmentTransaction ft = fragmentManager.beginTransaction();
        ft.replace(R.id.container, new TradeFragment(), "trien");
        ft.commit();

3
您可以在活动类中实现以下侦听器,以便监视对片段返回堆栈的更改。
public static interface FragmentManager.OnBackStackChangedListener  

稍后您需要使用帮助将此侦听器注册到片段管理器中。
 addOnBackStackChangedListener (FragmentManager.OnBackStackChangedListener listener)

链接供您参考。

https://developer.android.com/reference/android/support/v4/app/FragmentManager#addonbackstackchangedlistener

https://developer.android.com/reference/android/support/v4/app/FragmentManager.OnBackStackChangedListener


除非将片段添加到后退栈中,否则不会调用此函数,因此它与 OP 的示例不兼容。 - Tom

1

当新的Fragment处于活动状态时,它的onResume函数会被启动。在前一个Fragment被替换时,您可以执行想要的操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接