Подтвердить что ты не робот

Как передать значения между действиями на Android?

Это навигация моего приложения:

Activity1 вызывает Activity2Activity2.finish(), вызов Activity3Activity3.finish()

Когда Activity3 заканчивается, он вызывает метод onResume Activity1. Теперь как передать значение от Activity3 до Activity1?

4b9b3361

Ответ 1

Umesh показывает хорошую технику, но я думаю, что вы хотите противоположное направление.

Шаг 1

При запуске действий 2 и 3 используйте startActivityForResult. Это позволяет обрабатывать результат в вызывающей активности.

startActivityForResult(MY_REQUEST_ID);

Шаг 2

В действиях 2 и 3 вызовите setResult(int, Intent), чтобы вернуть значение:

Intent resultData = new Intent();
resultData.putExtra("valueName", "valueData");
setResult(Activity.RESULT_OK, resultData);
finish();

Шаг 3

В вашей активизации вызова выполните onActivityResult и получите данные:

protected void onActivityResult(int requestCode, int resultCode,
          Intent data) {
      if (requestCode == MY_REQUEST_ID) {
          if (resultCode == RESULT_OK) {
            String myValue = data.getStringExtra("valueName"); 
            // use 'myValue' return value here
          }
      }
}

Edit:

Техника № 2

Да, вы также можете использовать глобальное состояние приложения, добавив класс в ваше приложение, которое расширяет Application, см. этот ответ StackOverflow

Ответ 2

Используйте идентификатор сеанса для активности выписки в намерении, которое вы используете для запуска активности:

Intent intent = new Intent(getBaseContext(), SignoutActivity.class);
intent.putExtra("EXTRA_SESSION_ID", sessionId);
startActivity(intent)

Смотрите учебник.

Ответ 3

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

Ответ 4

Отправка намерения с 3-й по 1-й операции потребует некоторого триггера, например, кнопки или, возможно, метода жизненного цикла onStop для его отправки. Лучше автоматически отправить результат с помощью метода setResult.

Ответ 5

Также существует другая методика, вы можете вызвать метод startActivity(new Intent(getApplicationContext(),Activity1.class)) вместе с классом Bundle для переноса данных из activity3 в activity1.

Ответ 6

В Android можно запустить другое приложение с указанным именем пакета, передав ему аргумент.

public static void launchApp(Context context, String packageName) {
    Intent intent = context.getPackageManager().getLaunchIntentForPackage(packageName);

    if(intent == null) {
        intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + packageName));
    }
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.putExtra(Intent.EXTRA_TEXT, "*argument to send*");
    context.startActivity(intent);
}

Код ниже может использоваться для извлечения аргумента в целевом приложении.

public static String getArgument(Activity activity) {
    return activity.getIntent().getStringExtra(Intent.EXTRA_TEXT);
}

Требуется только ссылка на Activity, это полезно в Unity, где она беспорядочна для подкласса Activity.