1

В настоящее время структура андроид приложение являетсяУправление backstack в Android

Home 
    About us 
    Products 
    product1 
    product2 
    product3 
    Contact us 

Как есть меню на стороне и я могу получить доступ к устройству 1 непосредственно, Моя текущая попытка добавить к backstack для каждой сделки, и у него есть поведение, которое довольно странно

Если я вхожу в так:

Home->product1->About us 

поток после вхожу на главную страницу, я нажимаю на product1 в боковом меню, после ввода р roduct1 страницы нажмите на о нас на боковом меню

первый раз нажмите кнопку назад, он будет вернуться к product1, но он должен идти к дому

второй раз нажмите кнопку назад, он будет идти домой, но он должен перейти на страницу «Продукция»

Как обращаться с задним ходом в такой ситуации? Спасибо за помощь.

ответ

2

Вам нужно быть умным, когда вы меняете фрагменты и 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 используется для контроля того, может ли быть более одной записи в backstack.

Что касается вставки фрагмента продукта, когда пользователь переходит непосредственно на страницу подробных сведений, вам, вероятно, придется это сделать. т.е.: выполнить замену для продуктов, а затем заменить для сведений о продукте. Надеюсь, этот фрагмент кода и связанный пост помогут вам придумать решение, которое вам нужно.

0

Кнопка жесткого возврата всегда будет перемещаться по стеку, что является ожидаемым поведением пользователей.

Если вы ищете что-то, что перенесет вас на родительскую активность, например Product X, возвращающуюся на экран родительских продуктов, это то, что вы можете определить, используя функции кнопки Up. Up Navigation from Android Dev Site

Таким образом, вам не нужно пытаться очистить и управлять задним стеком, просто определите элементы, которые вернут пользователя на родительские экраны.

Смежные вопросы