У меня есть два действия: A и B. Когда действие A сначала запускается, оно обращается к переданному ему Intent
(поскольку Bundle
- null
, как и должно быть в первый раз), и соответственно отображает информацию:
CustInfo m_custInfo;
...
protected void onCreate(Bundle savedInstanceState)
{
...
Bundle bundle = (savedInstanceState == null) ? getIntent().getExtras() : savedInstanceState;
m_custInfo = (CustInfo) m_bundle.getSerializable("CustInfo");
if (m_custInfo != null
...
}
Это отлично работает в первый раз. Элементы управления EditText
и ListView
заполнены правильно.
Теперь, когда щелкнут элемент в списке, начнется действие B, чтобы показать детали:
m_custInfo = m_arrCustomers.get(pos);
Intent intent = new Intent(A.this, B.class);
intent.putExtra("CustInfo", m_custInfo); // CustInfo is serializable
// printing this intent, it shows to have extras and no flags
startActivityForResult(intent, 1);
Сразу же перед началом работы B каркас вызывает A overridden onSaveInstanceState()
:
protected void onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);
outState.putSerializable("CustInfo", m_custInfo);
}
В действии B, когда на панели действий нажата кнопка "Вверх", я хочу вернуться к активности A и быть в том же состоянии, что и раньше:
public boolean onOptionsItemSelected(MenuItem item)
{
if (item.getItemId() == android.R.id.home)
{
Intent intent = NavUtils.getParentActivityIntent(this);
// printing this intent, it shows to have flags but no extras
NavUtils.navigateUpFromSameTask(this); // tried finish() here but that created an even bigger mess
return true;
}
...
}
В этом заключается проблема, когда в onCreate()
активности A второй раз параметр Bundle
null
и getExtras()
возвращает null
. Поскольку onSaveInstanceState()
был вызван, я бы ожидал, что параметр Bundle
будет не null
.
Я читал об этой проблеме на других веб-сайтах, пробовал предложения, но ничего не работает.