Как я могу отправить данные с помощью финиша?

Как я могу отправлять данные из одной активности в другую, используя это:

intent.putExtra("Name", Value);

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

В моем приложении из Activity_A я перейду в Activity_B. В Activity_B я отмечаю местоположение на карте, что дает мне широту и долготу. Затем я хочу использовать этот lat и lng в Activity_A. Но я не хочу возвращаться к Activity_A с помощью намерения, потому что я не хочу воссоздавать Activity_A, поскольку некоторые уже заполненные данные будут потеряны.

Ответы

Ответ 1

Когда вы используете intent.putExtra("Name", Value);, используйте то же самое, продолжая также действие.

Например:

Из activityA вы вызываете activityB как:

intent.putExtra("Name", Value);
now instead of startActivity() use `startActivityForResult()`

И из activityB, завершая действие, вызывайте:

setResult(RESULT_OK);

Теперь в activityA будет вызываться ваш onActivityResult, который выглядит следующим образом:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
}

Таким образом, вы можете справиться с этим.

Ответ 2

В действии A:

// Add more, if you call different activities from Activity A
private static final REQUEST_GET_MAP_LOCATION = 0;

void doSomething() {
    ...
    startActivityForResult(theIntentYouUseToStartActivityB, REQUEST_GET_MAP_LOCATION);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_GET_MAP_LOCATION && resultCode == Activity.RESULT_OK) {
        int latitude = data.getIntExtra("latitude", 0);
        int longitude = data.getIntExtra("longitude", 0);
        // do something with B return values
    }
}

В действии B:

...
setResult(Activity.RESULT_OK, 
    new Intent().putExtra("latitude", latitude).putExtra("longitude", longitude));
finish();
...

Ответ 3

Вызовите Activity_B с startActivityForResult() с помощью Activity_A:

 //Starting a new Intent
 Intent nextScreen = new Intent(getApplicationContext(), Activity_B.class);
 // starting new activity
 startActivityForResult(nextScreen,1000);

Как только вы закончите работу над Activity_B, вы вызываете setResult() для установки данных, а затем finish(), как этот

 //Starting the previous Intent
 Intent previousScreen = new Intent(getApplicationContext(), Activity_A.class);
 //Sending the data to Activity_A 
 previousScreen.putExtra("Bla"," Blabla"); 
 setResult(1000, previousScreen);
 finish();

Это вернет вас к предыдущему Activity_A.

В Activity_A, переопределить onActivityResult().

 @Override  
  protected void onActivityResult(int requestCode, int resultCode, Intent data)     
  {
     super.onActivityResult(requestCode, resultCode, data);
     String bla = data.getStringExtra("Bla");       
  }

Найдено здесь

Ответ 4

используйте startActivityForResult для запуска B и setResult до B finish и обработайте onAcitivityResult в A