フラグメントがあり、画面の回転のために、いくつかの状態を保存したい
@Override
public void onSaveInstanceState(Bundle bundle)
{
super.onSaveInstanceState(bundle);
bundle.putSerializable("myList", myList);
bundle.putString("test", "test");
}
必要なデータを保存するために、デバッガーでコードが少なくとも呼び出されていることを確認してから、持っているデータを取得することができます
@Override
public void onActivityCreated(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
if(savedInstanceState != null)
{
//do something
}
else
{
//do something else
}
}
しかし、ここで私はいつも私のifステートメントのelse-brachになります。なぜnullなのかわかりません。ありがとう。
EDIT は、最初の回答に加えて次のようにコードを変更しました。
画面を回転させると、デバッガーに次のように表示されます。
- onSaveInstanceStateが呼び出されます
- onCreateは->bundle!=nullと呼ばれます
- onCreateが再度呼び出されます(理由)-> bundle = null
- onCreateActivityは呼び出されます->bundle= null
編集2 私はタブについての同様の投稿を見つけました、そこでそれらは切り離されました、そしてそれはそれが二度呼ばれる理由です。私はこれらの投稿を完全に理解していないことを認めなければなりません...しかし、それはそれに関連している可能性があります。私のアクティビティには、次のコードがあります
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
OverviewFragment of = new OverviewFragment();
FragmentTransaction tof = getFragmentManager().beginTransaction();
tof.replace(R.id.frag_overview, of);
DetailFragmentInitial df = new DetailFragmentInitial();
tof.replace(R.id.frag_details, df);
tof.commit();
}
どういうわけかそれを変更する必要があるかもしれません...しかし、私にはわかりません... savedInstaceStateがnullの場合にのみフラグメントトランザクションを実行すると、機能しているように見えます。しかし、後で別の問題が発生するかどうかはわかりません。誰かこれに関する背景知識はありますか?