Передача данных обратно в приостановленную деятельность - PullRequest
1 голос
/ 17 января 2011

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

С первого занятия я начинаю так:

//Create the activity we want to run and place it in an Intent
  Intent i = new Intent(activity, JVoiceActivity.class);

  //Create a bundle for passing some data.
  Bundle b = new Bundle();

  //Pass that this is a recording.
  b.putBoolean("Record", true);
  i.putExtras(b);

  //Start it.
  activity.startActivityForResult(i, 0);

Причина, по которой я использую активность вместо startActivityForResult, заключается в том, что это еще один класс, в котором я передаю действие, чтобы сохранить мой проект Object Orientated.

Затем на новом занятии я закрываю его так:

 public void onPause()
 {   
   Bundle bundle = new Bundle();

   bundle.putString("Path", mPath);
   Intent i = new Intent();

   i.putExtras(bundle);

   setResult(RESULT_OK, i);

   super.onPause();
 }

Наконец, в первом занятии у меня есть функция:

protected void onActivityResult(int requestCode, int resultCode, Intent data)
 {
  if(data!= null)
  {

Эта функция вызывается, но данные Intent всегда нулевые. Я предполагаю, что это так, как я закрываю второе действие, поскольку у меня это работало раньше, когда я тестировал его, в то время, когда я вызывал Finish () сразу после моего второго действия после установки mPath для целей тестирования.

Любая помощь очень ценится.

Ответы [ 3 ]

1 голос
/ 17 января 2011

Некоторые идеи, на которые стоит обратить внимание:

  • Результат будет отправлен обратно в вызывающую активность, только когда завершенные вызовы активности завершатся () (см. http://developer.android.com/reference/android/app/Activity.html#finish%28%29)
  • onPause делаетне означает, что ваша активность заканчивается, просто она приостанавливается. Если пользователь, например, нажимает кнопку «назад», он приостанавливает, но не завершает операцию (см. документацию по жизненному циклу активности)
  • In onActivityResultВы должны проверить requestCode. Я подозреваю, что вы получаете RESULT_CANCELED, потому что вызываемая активность не завершает () правильно перед возвратом.
0 голосов
/ 23 ноября 2012

Вы не должны вызывать setResult () из onPause (), потому что уже слишком поздно - результат устанавливается в метод finish (), который был вызван перед методом onPause (). Вместо этого вы можете вызвать setResult () форму onBackPressed () или любой другой метод, который выполняется перед вызовом finish ()

0 голосов
/ 17 января 2011

Метод onPause предназначен для обработки, когда что-либо закрывает вашу деятельность.Поэтому он не должен передавать метод setResult ().Поместите setResult в какое-то событие и в конце вызовите finish ().

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