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

Android: как заставить активность возвращать результаты деятельности, которая его вызывает?

У меня есть активность Location, которая может быть вызвана из многих действий, таких как Sign up и Order. В действии Location пользователь вводит свое местоположение, поэтому активность Location вернет это новое место в ту деятельность, которая вызвала его.

Итак, когда активность Sign up вызывает активность Location, она должна вернуть данные в действие Sign up. В другой раз активность Order будет делать то же самое.

Примечание

Я знаю, вы скажете мне, что я должен опубликовать код, но я не прошу вас дать мне код; Мне просто нужны советы, ссылки или хорошие темы.

4b9b3361

Ответ 1

Чтобы начать действие, которое должно вернуть результат вызывающей активности, вы должны сделать что-то вроде ниже. Вы должны передать код запроса, как показано ниже, чтобы определить, что вы получили результат от начатой ​​вами деятельности.

startActivityForResult(new Intent("YourFullyQualifiedClassName"),requestCode);

В действии вы можете использовать setData() для возврата результата.

Intent data = new Intent();
String text = "Result to be returned...."
//---set the data to pass back---
data.setData(Uri.parse(text));
setResult(RESULT_OK, data);
//---close the activity---
finish();

Итак, снова в первом действии вы напишите ниже код в onActivityResult()

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == request_Code) {
        if (resultCode == RESULT_OK) {
            String returnedResult = data.getData().toString();
        }
    }
}

РЕДАКТИРОВАТЬ на основе вашего комментария: Если вы хотите вернуть три строки, то следуйте этому, используя пары ключ/значение с намерением вместо использования Uri.

Intent data = new Intent();
data.putExtra("streetkey","streetname");
data.putExtra("citykey","cityname");
data.putExtra("homekey","homename");
setResult(RESULT_OK,data);
finish();

Получите их в onActivityResult, как показано ниже:

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == request_Code) {
        if (resultCode == RESULT_OK) {
            String street = data.getStringExtra("streetkey");
            String city = data.getStringExtra("citykey");
            String home = data.getStringExtra("homekey");
        }
    }
}

Ответ 2

Вы можете позвонить finish()

Подобно этому

@Override
public void onBackPressed() {
    Intent i = new Intent();
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    finish();
}

Ответ 3

Если вы хотите закончить и просто добавить resultCode (без данных), вы можете вызвать setResult(int resultCode) до finish().

Например:

...
if (everything_OK) {
    setResult(1); // OK!
    finish();
}
else {
   setResult(-1); // some error ...
   finish();
}
...

Затем в вашей активности вызова проверьте resultCode, чтобы убедиться, что все в порядке.

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == someCustomRequestCode) {
        if (resultCode == 1) {
            // OK!
        }
        else if (resultCode = -1) {
            // something went wrong :-(
        }
    }
}

Не забудьте вызвать операцию с помощью startActivityForResult(intent, someCustomRequestCode).