2013-02-18 3 views
0

У меня проблемы с решением этой проблемы.Ручной доступ Android Back Stack

В основном у меня есть нагрузка на вкладки в моем ActionBar. При каждом касании фрагменты с предыдущей вкладки отделяются, а фрагменты для новой вкладки добавляются с помощью замены (если они еще не были созданы) или прикреплены (если они есть). Я думаю, что получил этот метод от Google, и до сих пор он работал нормально.

Пример добавления фрагментов вкладки в:

if(tab.getText().equals(context.getString(R.string.title_class_tab))) {   
     if(browser == null) { 
      browser = CourseBrowserFragment.newInstance(false); 
      fragmentTransaction.replace(leftContainerId, browser); 
     } else { 
      fragmentTransaction.attach(browser); 
     } 

     if(lessonViewer == null) { 
      lessonViewer = LessonViewerFragment.newInstance(false); 
      fragmentTransaction.replace(rightContainerId, lessonViewer); 
     } else { 
      fragmentTransaction.attach(lessonViewer); 
     } 
} 

и удаление:

if(tab.getText().equals(context.getString(R.string.title_class_tab))) {   
     if(browser != null) { 
      fragmentTransaction.detach(browser); 
     } 
     if(lessonViewer != null) { 
      fragmentTransaction.detach(lessonViewer); 
     } 
} 

Проблема возникает из макета, мне нужно для одной из вкладок. В основном это похоже на приложение Gmail. Есть два фрагмента (скажем, панель А и панель B), и когда вы нажимаете кнопку «Панель А», панель «В» скользит по старой позиции панели А, а новая, третья (панель С) слайд справа.

У меня было это нормально, но теперь я добавил скользящее FragmentTransaction в задний стек, чтобы пользователь мог коснуться кнопки «Назад», и панель C вернется и панель A вернется. Опять же, как Gmail.

За исключением случаев, когда пользователь переходит на другую вкладку, эта транзакция все еще находится на задней панели и выполняется, если пользователь нажимает кнопку назад. Осколки оказываются в сумасшедших местах. Что мне нужно сделать, это удалить его из заднего стека, когда пользователь перейдет на другую вкладку. Есть ли способ сделать это? FragmentManager, похоже, не позволяет вручную удалять вещи из заднего стека, и использование метода popBackStack() не просто удаляет транзакцию, но и выполняет ее. Я хочу удалить его, когда пользователь переместится и вернет его, когда пользователь вернется.

Я думаю, что я могу завладеть записью «Back Stack Entry» для этой транзакции, используя «getBackStackEntryAt», но это не очень хорошо, если я не могу ее удалить и вернуть обратно, когда пользователь вернется к вкладка.

Единственное возможное решение, о котором я могу думать, не использует задний стек и вместо этого отменяет onBackButtonPressed. Оттуда я мог бы просто сделать обратную сделку, если это необходимо.

Спасибо за любую помощь и извините, если я некогерентен.

ответ

0

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

Как я управлял кнопкой «Назад», я задал логическое значение «true», если бы я был в макете, показывающем панель C. Если пользователь переместится обратно в панель В макете или перемещении логическое значение имеет значение false. Затем я переопределял метод onBackButtonPressed в Activity и если логическое значение было истинным (то есть: мы находимся в макете Panel C) Я запускаю эту обратную транзакцию, иначе я просто вызываю super.onBackButtonPressed() (т. Е. Выполняет стандартное поведение кнопки «Назад») ,

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