0
我有一個應用程序,我有3個主屏幕。處理片段過渡:從另一個片段顯示的菜單項
1)家庭
2)網格視圖
3)流查看
流我已是:
- 您可以從主頁查看到網格視圖
- 您可以從網格視圖轉到流視圖,反之亦然
- 當你想從Stream或Grid View返回,你應該登陸Home View。
當我使用菜單選項時,一切都很好。我有以下代碼:
首頁查看到網格視圖(添加主頁查看備份棧)
getFragmentManager().beginTransaction()
.replace(R.id.container, gridFragment)
.addToBackStack(gridFragment.getTag())
.commit();
格來流(不添加網格視圖後退堆棧)。流到網格視圖是類似的。
getFragmentManager().beginTransaction()
.replace(R.id.container, streamFragment)
.commit();
Grid to Home。流到家是類似的:
if (getFragmentManager().getBackStackEntryCount() > 0) {
getFragmentManager().popBackStack();
}
以上所有的工作正常。現在要處理設備上的硬件返回按鈕,我的Activity中有以下方法。
@Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() > 0) {
if (GlobalState.getCurrentFragment().class.getSimpleName().equals(
StreamFragment.class.getSimpleName())) {
clearBackStackAndChangeFragment(HomeFragment.newInstance());
} else if (GlobalState.getCurrentFragment().getClass().getSimpleName().equals(
GridFragment.class.getSimpleName())) {
clearBackStackAndChangeFragment(HomeFragment.newInstance());
} else {
getFragmentManager().popBackStack();
}
} else {
super.onBackPressed();
}
}
public void clearBackStackAndChangeFragment(Fragment fragment) {
FragmentManager fm = getFragmentManager();
fm.popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
fm.beginTransaction().replace(R.id.container, fragment).commit();
}
當用戶從首頁 - >併網進入>流 - > ...來回幾次...->首頁通過硬件後退按鈕,我運行到一個問題,即操作欄上的頂層菜單包含來自Grid/Stream視圖的項目。看起來我在處理片段事務時做錯了什麼。
1)我在做什麼錯了?
2)有沒有更簡單更乾淨的方式來做我想做的事情?
更新了使用getSimpleName()的問題。 – wislo