AとBの2つのアクティビティがあります。アクティビティ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のオーバーライドを呼び出します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が2回目に入ると、Bundle
パラメータはであり、を返します。呼び出されてから、パラメータが非であると予想していました。null
getExtras()
null
onSaveInstanceState()
Bundle
null
私は他のWebサイトでこの問題について読み、提案を試しましたが、何も機能しません。