2012-01-04 10 views
12

フラグメントは面白いですが、複数のデバイスにまたがって良いコードを書くための貴重なツールです。フラグメント/アクティビティのライフサイクルとオリエンテーションの変更

しかし、方向変更のバグを修正しているうちに、私は壁にぶつかりました。私のフラグメントが動作するには、アクティビティが含まれているビューへのアクセスが必要です。アクティビティは、アクティビティ&のフラグメントライフサイクルがどのようにやりとりするのかを調べるために、私を追いかけてくれます。このアクティビティ - >フラグメントのライフサイクルに大手

// Only add a fragment once, as after it's been added it cannot be replaced (Even though there is a .replace() method. Which is a massive gaping hole in fragments as a technology if you ask me) 
if(savedInstanceState == null) { 
    MainMenuFragment menu= new MainMenuFragment(); 
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
    transaction.replace(R.id.menuFrame, menu); 
    transaction.commit(); 
} 

:それはonCreate()方法だ中で、私は私の活動への断片を追加している

が表示

01-04 15:17:27.226: W/SinglePaneActivity 0: onCreate() 
01-04 15:17:27.378: W/MainMenuFragment 0: onAttach() to SinglePaneActivity 0 
01-04 15:17:27.378: W/MainMenuFragment 0: onCreate() 
01-04 15:17:27.453: W/MainMenuFragment 0: onActivityCreated() 
01-04 15:17:27.476: W/MainMenuFragment 0: onStart() 
01-04 15:17:27.476: W/SinglePaneActivity 0: onStart() 
01-04 15:17:27.476: W/SinglePaneActivity 0: onResume() 
01-04 15:17:27.476: W/MainMenuFragment 0: onResume() 

姿勢の変化は、しかし、このISNことを浮き彫りに通常はその場合、フラグメントonCreate()は親の後に呼び出されません。アクティビティonCreate()。活動も作成されている前Infactは、フラグメントのonAttach()の最初のライフサイクル・コールが(nullが引数として渡される)発生します。

01-04 15:10:49.589: W/MainMenuFragment 0: onPause() 
01-04 15:10:49.589: W/SinglePaneActivity 0: onPause() 
01-04 15:10:49.589: W/MainMenuFragment 0: onStop() 
01-04 15:10:49.589: W/SinglePaneActivity 0: onStop() 
01-04 15:10:49.589: W/MainMenuFragment 0: onDestroyView() 
01-04 15:10:49.589: W/MainMenuFragment 0: onDestroy() 
01-04 15:10:49.589: W/MainMenuFragment 0: onDetach() 
01-04 15:10:49.609: W/SinglePaneActivity 0: onDestroy() 
01-04 15:10:49.617: W/MainMenuFragment 1: onAttach() to null 
01-04 15:10:49.617: W/MainMenuFragment 1: onCreate() 
01-04 15:10:49.617: W/SinglePaneActivity 1: onCreate() 
01-04 15:10:49.890: W/MainMenuFragment 1: onActivityCreated() 
01-04 15:10:49.917: W/MainMenuFragment 1: onStart() 
01-04 15:10:49.917: W/SinglePaneActivity 1: onStart() 
01-04 15:10:49.921: W/SinglePaneActivity 1: onResume() 
01-04 15:10:49.921: W/MainMenuFragment 1: onResume() 

私は、これが発生している理由は絶対にないアイデアを持っていません。誰もがなぜFragment.onAttach()が呼び出される前にアクティビティが作成されているのかを知ることができますか?

私が持っているフラグメントは、(UIのやりとりまで)期待通りに機能するものにアクセスする必要はありません。一体私は見当がつかないonAttach()方法があるのはなぜ

答えて

11

なんてこった、

01-04 15:46:23.175: W/MainMenuFragment 0: onAttach() to SinglePaneActivity 0 
01-04 15:46:23.179: W/MainMenuFragment 0: onCreate() 
01-04 15:46:23.246: W/MainMenuFragment 0: onActivityCreated() with Activity SinglePaneActivity 0 
01-04 15:46:23.269: W/MainMenuFragment 0: onStart() 
01-04 15:46:23.269: W/SinglePaneActivity 0: onStart() 

。特に、アクティビティが発生する前に「アタッチ」が発生するためです。

私が必要とした方法は、もちろん、Fragment lifecycle eventsの "Creation"セットの最後の呼び出しとして発生するonActivityCreated()でした。

+0

私を助けてくださいhttp://stackoverflow.com/questions/12331787/save-fragment-objects – user4o01

関連する問題