![](/img/trans.png)
[英]Remove specefic fragment from backstack that is not on top of backstack
[英]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.