2013-08-14 3 views
0

У меня есть ситуация, когда у меня есть процесс регистрации в три этапа. Каждый шаг содержится в его собственном действии - называть их A, B и C. Только когда я дойду до конца третьего шага, могу ли я достоверно проверить один из входов (и адрес электронной почты, на который я отправляю подтверждение, используя PHPMailer) , Если это вернется с ошибкой, я хочу вернуться к A, где и будет введен адрес электронной почты.Android: Имитация обратной кнопки дважды

Это достаточно просто, просто называя намерение. Тем не менее, я хочу сохранить входные значения, введенные пользователем, чтобы они не вводили их снова. Теоретически, самый простой способ сделать это - дважды позвонить finish(). Но это не работает, поскольку вызывает его, как только передает управление обратно в B, а второй вызов никогда не происходит.

Есть ли простой способ сделать это, или мне нужно вызвать Intent, а затем каким-то образом заполнить поля с помощью другого метода? Благодаря!

+0

Посмотрите на это [ответ] (http://stackoverflow.com/questions/18229797/closing-application-and-killing-it-from-ram/18229915#18229915) - * подсказка * ключ находится в флагах .... – t0mm13b

ответ

1

Я не уверен, что я полностью получить вас, но вы можете использовать флаг FLAG_ACTIVITY_CLEAR_TOP, чтобы вернуть его к A и B. удалить

Intent i = new Intent(C.this, A.class) 
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(i); 
finish(); 

Выполнить этот код, когда вы получите сообщение об ошибке, и это принесет резервное копирование. И если нажата кнопка «Назад», вы все равно доберетесь до B.

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

+0

Кажется, что он должен работать. Однако, когда я возвращаюсь к A, все мои поля очищаются, и именно этого я и стараюсь избежать. Одно изменение в коде, которое я должен был сделать, было во второй строке, которую я должен был сделать, чтобы «i.setFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP», чтобы избежать ошибки «FLAG_ACTIVITY_CLEAR_TOP» не может быть разрешен переменной ». Согласны ли вы с этим изменением или я должен обрабатывать его по-другому? Спасибо! – Alex

+0

Нет, это правильно. Извините, я обычно не забываю об этом. Я отредактирую свой ответ – codeMagic

+0

Затем сохраните их в 'SharedPreferences', как я предложил, и перезагрузите данные frome there – codeMagic

-1

Для передачи данных вокруг между различными видами деятельности, использовать Bundle, для примера, в этом классе деятельности - B

Intent intent = new Intent(this, C.class); 
Bundle b = new Bundle(); 
b.putBoolean("some_boolean_value", true); 
b.putInt("some_int_value", 4); 
b.putString("some_string_value", "foobar"); 
intent.putExtra("fooBundle", b); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(i); 
finish(); 

Тогда из вашего класса активности «C», после того, как он появляется на экране, изнутри метод onCreate, извлечь узелок:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (savedInstanceState.containsKey("fooBundle")){ 
     Bundle b = savedInstanceState.getBundle("fooBundle"); 
     int nVal = b.getInt("some_int_value"); 
     String sVal = b.getString("some_string_value"); 
     boolean blnVal = b.getBoolean("some_boolean_value"); 
     // Do whatever you have to do, put them into textview's etc. 
    } 
} 

Обратите внимание, как производится проверка, чтобы обеспечить там действительно расслоение, если нет, то сво "пустой вид "т. Е. Нет данных для заполнения в полях. И отмените вытягивание значений из Bundle.

Когда вы возвращаетесь из класса деятельности C, он возвращается к действию A.

Редактировать

ОП настаивает на использовании «два» назад ключевых штрихов который считается ненужным, как флаг, указывающий на активность очищается от стека.

A -> B

Перед созданием намерения в коде выше и работает, стек теперь становится ...

A -> C

Теперь вернитесь из вида деятельности C, нажав на заднюю клавишу.

+0

Спасибо для предложения. Я знаю, что могу это сделать (или использовать общие настройки). Просто посмотрите, есть ли быстрый способ имитировать два «обратных» щелчка. Возможно, я очень хорошо завершу это так. ! – Alex

+0

Общие предпочтения - это не способ сделать что-то вроде этого. – t0mm13b

+1

Я не уверен, как это отвечает на вопрос. Вопрос не в том, как передавать данные, но как получить назад к A с ошибкой и удалите B. С помощью этого кода, если пользователь нажмет на C, тогда они будут отправлены в A, но это не то, что они хотят – codeMagic

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