Рассмотрим этот сценарий:
public class Parent extends Activity{
@Override
public void onCreate(Bundle icicle) {
super.onCreate();
.......
}
public void onResume(){
super.onResume();
....
onClick of BUTTON b1.....
Intent intent = new Intent(Parent.this, Child.class);
intent.putExtra("param", data);
startActivityForResult(intent, ACTION_LAUNCH_CHILD_ACTIVITY);
}
....
}
public void onActivityResult(){
do something......
}
}
}
==========================================
public class Child extends Activity{
@Override
public void onCreate(Bundle icicle) {
super.onCreate();
.......
}
public void onPause(){
super.onPause();
setResult(OK);
finsh();
}
....
}
}
}
Шаги:
Но я не вижу, чтобы программный элемент управления включал Parent onActivityResult, когда приложение было перенесено в backgrnd.
Где находится программный контроль для этого, когда приложение находится в фоновом режиме?
Принесите приложение обратно в foregrnd, каково ожидаемое поведение с точки зрения жизненного цикла активности?
Заранее спасибо
Может кто-нибудь объяснить это, пожалуйста.
Если вы удалите вызов для завершения() в onPause, то нажатие домашнего ключа вызывает только дочерние действия onPause. При повторном запуске приложения вызывается только дочерний метод onResume. Кажется, что ни один из родительских методов не вызван. Шаблон вызова setResult в действии, а затем закончить в onPause FAILS после того, как пользователь изменит ориентацию телефона. Поэтому, если пользователь вводит данные, сохраняет данные (вызывая setResult в onSaveButtonClicked), меняет ориентацию телефона и выходит из завершения вызова, а изменения НЕ СОХРАНЯТСЯ.
Рассмотрим вызов finish() сразу после setResult в тот момент, когда у вас достаточно данных, чтобы установить результат, выходя из дочерней активности.
// UPDATE BUTTON HANDLER
final Button buttonUpdate= (Button)findViewById(R.id.ButtonPasswordUpdate);
buttonUpdate.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
String password= editTextPasswordFirst.getText().toString();
String verify= editTextPasswordSecond.getText().toString();
String err="";
if (password.equals(verify) && (password.length() >= minimumPasswordLength)) { // 1) SUCCESS
ResetTimeoutValues(timeoutType); // new password so calculate new timeout time
isValidKey= true;
PasswordState outPasswordState= new PasswordState(lengthKey,
timeExpire,
isValidKey,
timeoutType,
password,
isHashPassword,
minimumPasswordLength);
Bundle b= new Bundle();
b.putSerializable("jalcomputing.confusetext.PasswordState", outPasswordState);
getIntent().putExtras(b);
setResult(RESULT_OK,getIntent()); // call home with data on success only
finish(); // go back <=== EXITS Here
return;
}...
});