簡體   English   中英

當 Fragment 進入 backstack 時移除 FAB

[英]Remove a FAB when a Fragment goes to backstack

我看過很多答案,但似乎沒有找到。 我在我的一個片段中使用了新的 FAB,並希望在該特定片段進入后台堆棧時將其刪除,但我不確定在將其添加到后台堆棧並由其他片段替換時調用片段中的哪個方法。

每當Fragment被替換或添加到 backstack 時,就會調用以下方法

1) onPause()

2) onStop()

3) onDestroyView()

在您的Fragment中使用上述任何一種方法調用您的 FAB 刪除方法。

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

這是我的建議——

首先,在您的 Activity 中添加動畫代碼和 backstack 偵聽器:

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);
       }
   }

然后 - 根據 backstack 深度 - 顯示或隱藏 FAB:

    @Override
    public void onBackStackChanged() {
        showFab(getSupportFragmentManager().getBackStackEntryCount() > 0);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM