片段进入后台时移除FAB

时间:2015-09-25 07:23:51

标签: java android fragment back-stack floating-action-button

我已经看到很多答案,但似乎没有找到答案。我在我的一个片段中使用了新的FAB,并希望在特定片段进入backstack时删除它,但我不确定片段中的哪个方法在被添加到后栈并被其他片段替换时会被调用。

2 个答案:

答案 0 :(得分:0)

只要替换Fragment或将其添加到backstack

,就会调用以下方法

1) onPause()

2) onStop()

3) onDestroyView()

Fragment

中的上述任何一种方法中调用您的FAB删除方法

http://developer.android.com/guide/components/fragments.html#Creating

答案 1 :(得分:0)

这是我的建议 -

首先,在Activity中添加动画代码和backstack监听器:

sonar.python.xunit.skipDetails=false

然后 - 根据背斜深度 - 显示或隐藏FAB:

public class MainActivity extends AppCompatActivity 
    implements FragmentManager.OnBackStackChangedListener {

    private FloatingActionButton mFab;
    private Animation mShowFab;
    private Animation mHideFab;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        getSupportFragmentManager().addOnBackStackChangedListener(this);

        mShowFab = AnimationUtils.makeInAnimation(this, false);
        mShowFab.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationEnd(Animation animation) {
            }

            @Override
            public void onAnimationRepeat(Animation animation) {
            }

            @Override
            public void onAnimationStart(Animation animation) {
                mFab.setVisibility(View.VISIBLE);
            }
        });

        mHideFab = AnimationUtils.makeOutAnimation(this, true);
        mHideFab.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationEnd(Animation animation) {
                mFab.setVisibility(View.INVISIBLE);
            }

            @Override
            public void onAnimationRepeat(Animation animation) {
            }

            @Override
            public void onAnimationStart(Animation animation) {
            }
        });
    }

    public void showFab(boolean show) {
        boolean visible = mFab.isShown();
        if (show) {
            if (!visible)
                mFab.startAnimation(mShowFab);
        } else {
            if (visible)
               mFab.startAnimation(mHideFab);
       }
   }