當您在適當的時間更改碎片和popBackStack
以便控制堆棧時,您將需要很聰明。下面是從我的應用程序之一(也處理重新使用在棧現有片段)的例子:
// Idea from http://stackoverflow.com/questions/18305945/how-to-resume-fragment-from-backstack-if-exists
private void setPrimaryContentFragment(BaseFragment fragment, boolean allowStack){
final String backStackName = fragment.getBackStackName();
final FragmentManager manager = getSupportFragmentManager();
final boolean fragmentPopped = manager.popBackStackImmediate(backStackName, 0);
if (!fragmentPopped) { //fragment not in back stack, create it.
if (!allowStack && manager.getBackStackEntryCount() > 1) {
manager.popBackStack(manager.getBackStackEntryAt(0).getId(), 0);
}
final FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.primary_content, fragment);
transaction.addToBackStack(backStackName);
transaction.commit();
try {
manager.executePendingTransactions();
} catch (IllegalStateException exception) {
// Move along as this will be resolved async
}
}
}
的getBackStack()
方法在我的鹼基的片段來實現,並具有一個默認的實現:
public String getBackStackName() {
return getClass().getName();
}
的allowStack
標誌用於控制在堆棧中是否有多個條目。
就用戶直接導航到詳細信息頁面插入產品片段而言,您可能需要這樣做。即:執行產品替換,然後替換產品詳細信息。 希望此代碼段和鏈接的帖子將幫助您想出您需要的解決方案。