Android: как заставить действие возвращать результаты в действие, которое его вызывает?
у меня есть Location
активность, которая может быть вызвана из многих мероприятий, таких как Sign up
и Order
. В Location
активность пользователь вводит свое местоположение, поэтому активность Location
вернет это новое местоположение в то действие, которое его вызвало.
когда Sign up
activity вызывает Location
activity, он должен вернуть данные в Sign up
активности. В другой раз Order
деятельность будет делать то же самое.
Примечание
Я знаю, что вы скажет мне, что я должен опубликовать код, но я не прошу Вас дать мне код; мне просто нужны некоторые советы, ссылки или хорошие темы.
3 ответов
чтобы начать действие, которое должно вернуть результат вызывающему действию, вы должны сделать что-то вроде ниже. Вы должны передать requestcode как показано ниже, чтобы определить, что вы получили результат от начатого действия.
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();
// OR
// String returnedResult = data.getDataString();
}
}
}
редактировать на основе на ваш комментарий: Если вы хотите вернуть три строки, следуйте этому, используя пары ключ/значение с намерением вместо использования 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");
}
}
}
если вы хотите закончить и просто добавить 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)
.
можно назвать finish()
такой
@Override
public void onBackPressed() {
Intent i = new Intent();
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
finish();
}