Ответ 1
Если вам требуется второе действие, чтобы вернуть некоторые данные в свою первую активность, я рекомендую вам использовать startActivityForResult(), чтобы начать второе действие. Затем в onResult() в вашем первом действии вы можете выполнить необходимую работу.
В First.java, где вы запускаете Second.java:
Intent intent = new Intent(this, Second.class);
int requestCode = 1; // Or some number you choose
startActivityForResult(intent, requestCode);
Метод результата:
protected void onActivityResult (int requestCode, int resultCode, Intent data) {
// Collect data from the intent and use it
String value = data.getString("someValue");
}
В Second.java:
Intent intent = new Intent();
intent.putExtra("someValue", "data");
setResult(RESULT_OK, intent);
finish();
Если вы не хотите дожидаться завершения второго действия, прежде чем выполнять какую-либо работу в первом мероприятии, вместо этого вы можете отправить широковещательную передачу, на которую реагирует первая активность.
EDIT:
Если вам нужен доступ к некоторым значениям в вашем первом действии без статической ссылки на него, вы можете рассмотреть возможность включения своих действий в ActivityGroup.
Итак, ActivityGroup запускает первую активность. И затем первая активность использует ActivityGroup для запуска второго действия. Затем у вас будет доступ к Первому активу через вызов getParent() во втором действии.
class MyActivityGroup extends ActivityGroup {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
startChildActivity("first", new Intent(this, First.class));
}
public void startChildActivity(Intent intent) {
Window window = getLocalActivityManager().startActivity(id, intent);
if (window != null) {
setContentView(window.getDecorView());
}
}
}
В First.class:
Intent = new Intent(this, Second.class);
((MyActivityGroup) getParent()).startChildActivity("second", intent);
В Second.class:
Activity first = (First) getParent();