2015-09-25 24 views
-2

我看到很多答案,但似乎沒有找到答案。我在我的一個片段中使用了新的FAB,並且希望在特定片段進入backstack時將其刪除,但是我不確定片段中的哪個方法在被添加到背堆棧並被其他片段替換時被調用。每當Fragment被替換或添加的被稱爲當碎片進入後臺時刪除FAB

+0

你的問題是什麼? –

+0

我想知道在調用fragment.replace()方法時調用的方法或者將片段添加到背堆棧中的方法 – Ravi

回答

0

以下方法來返回堆棧

1)的onPause()

2)的onStop()

3)onDestroyView()

在y中的上述任何一種方法中調用您的FAB去除方法我們的Fragment

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

+0

我嘗試了所有這些方法,但沒有一個被調用:( – Ravi

+0

@Ravi所有三個都在我的調用中應用程序,當我用backstack替換片段,也許你正在替換他們錯? – Breavyn

+0

我跟隨谷歌文檔,但是當我最小化我的應用程序,然後所有這些方法正在調用,但是當我改變片段,他們不會調用!! – Ravi

0

這裏是我的建議 -

首先,添加了動畫代碼和堆棧中監聽你的活動:

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

然後 - 根據堆棧中的深度 - 顯示或隱藏FAB:

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

中調用? – Ravi

+0

當你從後端堆棧中向/從後端堆棧中壓入/彈出一個片段 –

+0

onBackStackChanged()沒有被調用? – Ravi

相關問題