На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Hsilgos
  
> Android. Удаление активности из стека активностей
    Всем привет!

    Подхожу к финальной стадии разработки своего приложения для заказа такси. Уже работает SMS-регистрация, но шеф после тестирования отметил парочку нюансов. Данная тем посвящена вопросу, как разобраться с одним из них. Уже зарегистрированный пользователь, который уже некоторое время проработал с приложением, может пожелать получить новый код регистрации по SMS. Это нужно, в частности, в такой ситуации. Система разрешает работать под одним и тем же аккаунтом на разных устройствах, допустим, на смартфоне, и на планшете, для этого и там и там в форме регистрации нужно указать для номера телефона один и тот же код регистрации, полученный по SMS. Например, я отдал свой планшет знакомому, но не подчистил на нем за собой, осталась рабочая установка программы. Но я хочу исключить возможность того, чтобы этот знакомый мог воспользоваться моим аккаунтом для заказа такси с помощью этого приложения. Ну или еще хуже, я просто потерял устройство. Активность, где можно заказать новый код по SMS вызывается по команде меню из основной активности - формы заказа такси. Если пользователь подтверждает действие заказа нового кода регистрации, то в случае успешной отработки скрипта (высылается SMS) он перебрасывается в форму регистрации, где должен ввести этот новый код. При этом активность, где он заказал этот новый код, уничтожается. Таким образом, получается такой стек активностей:

    Форма заказа такси -> Форма регистрации

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

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

    Как такое реализовать меньшими усилиями? Я знаю, что можно повесить обработчик OnKeyUp (ну или как там точно, это уже не суть), в котором можно обработать именно нажатие хардварного НАЗАД и завершить работу всего приложения. Но мне бы хотелось эту задачку решить красиво, с помощью манипуляции со стеком активностей - а именно просто в случае НАЗАД убрать форму регистрации из стека, тогда и произойдет выход из приложения.

    Долго копался на StackOverflow, но подходящего решения не нашел.
      имхо, может для формы заказа сделать:

      не знаю можно ли достать так объект,

      ExpandedWrap disabled
        ClassOrderActivity.this.finish();


      или при событии

      OnStart() анализировать какую-то переменную(ключа регистрации) и там же сделать finish() если не подходит.

      Добавлено
      http://stackoverflow.com/questions/7790248...nother-activity
      Сообщение отредактировано: micro -
        Решилось довольно просто, но может быть, не очень ортодоксально, что ли. У меня есть класс - модуль с общими данными CommonData, вообще-то это синглтон, но сейчас для простоты я создал в нем статическое поле boolean bFinish. При заходе в форму регистрации оно ставится в true. А в false ставится только в случае успешного завершения действий по регистрации, прямо перед открытием формы заказа. А в форме заказа сделал такую вот проверку.

        ExpandedWrap disabled
          @Override
              public void onResume()
              {
                  super.onResume();
                  if (CommonData.bFinish)
                      finish();
              }


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


        Рейтинг@Mail.ru
        [ Script execution time: 0,0229 ]   [ 15 queries used ]   [ Generated: 4.05.24, 04:52 GMT ]