Fragmentの使用上の注意事項

1879 ワード

Fragmentタスクスタック


Fragmentもタスクスタック管理を追加し、複数のFragmentが前後して追加された後、前のFragmentに戻ることができ、activityコンテナ内にFragmentがない場合、Activityを終了します.Activityはタスクスタックによって管理され、先進的な後出の原則に従い、fragmentタスクスタックの効果はactivityと同じである.
  • 実装形態
  • // commit 
    FragmentTransaction.addToBackStack(null) ;
    

    完全なコードは次のとおりです.
    Fragment fg = new Fragment(); 
    FragmentManager fm = getSupportFragmentManager(); 
    FragmentTransaction ft = fm.beginTransaction(); 
    ft.replace(R.id.fragment_container, fg, "tag_fragment"); 
    ft.addToBackStack(null); 
    ft.commit(); 
    
  • 注:1.Activityの最初のFragment(ルートFragment)は、ロールバックスタックを追加しないことができ、最後のFragmentが戻ると ではなくactivityを直接終了します.(Activityのすべてがfragmentで構成する、fragmentに が追加されている場合、最初のfragmentに戻るとページが に表示される).呼び出しaddToBackStack(null)現在のトランザクションをロールバックスタックに追加し、replaceメソッドを呼び出すとFragment が呼び出されますが、 、つまりonDestoryViewonCreateViewが呼び出されます.現在のfragmentビューの状態を保存するには、hide後addの新しいFragment
  • を使用します.

    ActivityとFragment通信

  • activity->fragment
  • はfragmentインスタンスを作成するsetArguments(Bundle bundle)によって実現され、FragmetnではgetArguments()によって
  • が取得する.
  • fragmentでgetActivity()によってホストactivityのオブジェクトを取得し、activityの共有メソッドまたは属性
  • を直接呼び出すことができる.
  • 放送
  • インタフェース
  • fragment->activity
  • activityでfragmentのインスタンスオブジェクトを直接取得し、共通属性またはメソッド
  • を取得することができる.
  • インタフェース
  • 放送
  • fragment->framgmentホストactivityによるデータインタラクション
  • Fragment重複問題


    スクリーンの回転やメモリの再起動(Fragmentおよびコンテナactivityがシステムによって回収されてから開くと再初期化)は、activity自体が再起動されるとFragmentが復元され、Fragmentのコードが作成されて新しいFragmentが作成されるため、Fragmentが重なる問題を引き起こします. :onCreateメソッドでパラメータBundle savedInstancesStateを判断し、Fragmentインスタンスをアイドル時に初期化し、その後FragmentでonSaveInstanceStateメソッドでデータを復元