Как отправить данные между действиями без использования намерений? [Дубликат]

8
задан sftdev 14 August 2013 в 23:40
поделиться

2 ответа

Вы хотите startActivityForResult(). Когда вы переходите от C до D, вместо использования startActivity() используйте вместо этого startActivityForResult(). Затем, когда вы хотите вернуться с D до C, вы используете setResult(), который может включать объект Intent с extras, чтобы вернуться к C.

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

Итак, в C вы сделаете что-то вроде

 Intent i = new Intent(new Intent(C.this, D.class);
 startActivityForResult(i, 0);

, затем в D, когда вы будете готовы возвратить

 Intent i = new Intent();
 i.putExtra();  // insert your extras here
 setResult(0, i);

, тогда, когда вы вернетесь к C, вы введете этот метод (, взятый из Документов )

protected void onActivityResult(int requestCode, int resultCode,
         Intent data) {
     if (requestCode == PICK_CONTACT_REQUEST) {
         if (resultCode == RESULT_OK) {
             // A contact was picked.  Here we will just display it
             // to the user.
             startActivity(new Intent(Intent.ACTION_VIEW, data));

             /* 
                can also get the extra sent back through data
                using data.getStringExtra("someKey"); 
                assuming the extra was a String
             */

         }
13
ответ дан codeMagic 24 August 2018 в 10:20
поделиться

В некоторых случаях, когда startActivityForResult действительно не нужен или нецелесообразно изменять все вызовы startActivity для startActivityForResult.

Если нужен простой случай только начала предыдущей операции «снова», Рекомендация: Использовать флаг FLAG_ACTIVITY_CLEAR_TOP.

Котировка краткого описания :

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

Например, рассмотрите задачу, состоящую из действий: A, B, C, D. Если D вызывает startActivity () с намерением, который разрешает компонент активности B, то C и D будут завершены и B получит данное намерение, в результате чего стек теперь будет: A, B.

Итак, этот пример

   // From ActivityD
   Intent intent = new Intent(getApplicationContext(), ActivityB.class);
   intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // The flag we wanted
   intent.putExtra(ActivityB.SOME_EXTRA_THAT_I_NEED_CHANGED, SomeValue); // Example of changing the intent to get something new..
   startActivity(intent);

Где вы это получите новое намерение определяется режимом запуска и флагами, где он использовался для запуска (в данном случае нашего ActivityB).

Текущий исполняемый экземпляр действия B в приведенном выше примере либо получит новый вы начинаете здесь в методе onNewIntent () или сами закончите и перезапустите с новым намерением. Если он объявил свой режим запуска «множественным» (по умолчанию), и вы не установили FLAG_ACTIVITY_SINGLE_TOP в одном и том же намерении, он будет завершен и заново создан; для всех других режимов запуска, или если установлен FLAG_ACTIVITY_SINGLE_TOP, этот Intent будет доставлен на текущий экземпляр onNewIntent ().

1
ответ дан DNax 24 August 2018 в 10:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: