Можно ли вернуть результат startActivityForResult в другое активити?
Всем привет! Есть Activity1 со списком записей, из которой я нажимаю кнопку добавления записи и запускаю startActivityForResult для AddActivity. При успешном добавлении, возвращаю результат в Activity1. В Activity2 также есть кнопка для добавления. При нажатии кнопки я открываю AddActivity уже из Activity2, но после добавления записи мне нужно перейти к их списку и обновить его в Activity1. Подскажите, возможно ли стартовать из одной активити, а результат вернуть в другую?
UPD: Без finish() не работало:
class ActivityThree extends AppCompatActivity {
static final String EXTRA_MESSAGE = "message";
@Override
public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {
super.onCreate(savedInstanceState, persistentState);
setResult(RESULT_OK, new Intent().putExtra(EXTRA_MESSAGE, "Some message"));
finish();
}
}
Ответы (1 шт):
Можно. Условно вы запускаете Activity 1 из нее Activity 2, а из Activity 2 - Activity 3.
Собственно если вы хотите из Activity 3 прокинуть result в Activity 1 вам просто нужно в Activity 2 в методе onActivityResult() получить результат, вытянуть из Intent-a данные и положить их в Activity 2 в метод setResult()
P.S. Небольшой пример:
ActivityOne:
class ActivityOne extends AppCompatActivity {
private static final int REQUEST_CODE = 0;
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK) {
// do something
String message = data.getStringExtra(ActivityThree.EXTRA_MESSAGE);
}
}
void startActivityTwo() {
startActivityForResult(new Intent(this, ActivityTwo.class), REQUEST_CODE);
}
}
ActivityTwo:
class ActivityTwo extends AppCompatActivity {
private static final int REQUEST_CODE = 0;
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE && resultCode == RESULT_OK){
setResult(RESULT_OK, data);
}
}
void startActivityThree() {
startActivityForResult(new Intent(this, ActivityThree.class), REQUEST_CODE);
}
}
ActivityThree:
class ActivityThree extends AppCompatActivity {
static final String EXTRA_MESSAGE = "message";
@Override
public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {
super.onCreate(savedInstanceState, persistentState);
setResult(RESULT_OK, new Intent().putExtra(EXTRA_MESSAGE, "Some message"));
}
}