Android Fragmentライフサイクル-マルチスクリーンサポート


Fragmentを使用する前に、Fragmentのライフサイクルは関心のある問題です.現在、Androidでアプリを開発するには「断片化」の問題、あるいはマルチスクリーンの適合を考慮しなければならない.これは開発者一人一人が直面しなければならない問題だ.
現在、市場では携帯電話の画面解像度、サイズが様々で、さらに悪いことに、携帯電話のほかにタブレットがあります.画面サイズだけでは携帯電話とタブレットの違いが大きいことはよく知られています.したがって、アプリケーションを開発するときは、APPが異なるデバイスに適用され、より良いユーザー体験を確保するために最適な効果を達成しなければならないことを覚えておいてください.そこで問題が発生し、携帯電話やタブレットに同じ効果を表示するようにアプリケーションを調整する必要があります.つまり、今ではマルチスクリーンが適しています.以前の投稿では、Androidのいくつかの特性を使用してマルチスクリーンサポートを行う方法について説明しました.例えば、異なるレイアウトファイルを作成するなどです.この方式は今でもそうすることができますが、もう私たちの要求を満たすことはできません.
古典的な例は、アプリケーションにリストがあり、ユーザーがリストエントリをクリックすると詳細が表示されます.この場合、携帯電話やタブレットで異なる体験効果を得ることができます.携帯電話では、図のように2つのActivityが必要です.
ユーザーがクリックすると、次のような画面が表示されます.
タブレットでは、画面をよく利用して、図のようにリストと詳細を表示する必要があります.
上記の例から明らかなように、いずれかのActivityが別のActivityを呼び出したときに、両方のActivityが同時にまたは前後して表示されるように、Activityをマージする方法が必要です.コードを書き直さずにインタフェースレイアウトを再編成する必要がありますが、マルチレイアウトを使用するだけではだめです.他の技術が必要です.
Fragment
Android 3.0にFragmentという新しい概念が導入された.独自のレイアウトファイルがあり、コンポーネントとして配置したり、組み合わせて異なるレイアウト表示を実現したりすることができます.Fragmentを使用すると、コードを再利用でき、異なるデバイスサイズのニーズを満たすことができます.Fragmentは単独では存在せず、Activityにのみ存在し、1つのActivityは複数のFragmentを持つことができる.重要な点は、FragmentがActivityのインタフェースをすべて書き換える必要がなく、Activityの他のコンポーネントと一緒に使用できることです.したがって、Fragmentを使用すると、前例の「メインインタフェース-詳細インタフェース」のAPP要件を完了することができます.
携帯電話には次のように表示されています.
プレートには次のようなものがあります.
Fragmentライフサイクル
Fragmentが使いやすいことを知っている以上、その動作原理も知る必要があります.Fragmentは(コンテナとしての)Activityにしか存在しません.各Fragmentには独自のビュー構造があり、私たちの前のようにレイアウトをロードすることができます.Fragmentのライフサイクルは、図のようにより多くの状態があるため、より複雑です.
Fragmentの完全なライフサイクルを見てみましょう.
  • Fragmentライフサイクルの開始時にonInflateメソッドが呼び出されます.この方法は、レイアウトファイルでラベルで直接定義した場合にのみ呼び出されます.この方法では、xmlレイアウトファイルで定義された構成パラメータと属性を保存できます.
  • このステップが過ぎるとonAttachが呼び出される番です.この方法はFragmentが親Activityにバインドされている間に呼び出され、ここでActivityとの参照を保存できます.
  • 以降onCreateが呼び出されます.これは最も重要なステップの一つです.Fragmentはこのステップで生成され、リモートサーバから起動するなど、他のスレッドを起動してデータを取得することができます.
  • onCreateViewこのメソッドは、ListViewコントロールにレイアウトをロードするように、Fragmentが独自のビュー構造を作成するときに呼び出されます.このプロセスでは、親Activityが作成されたかどうかは保証できませんので、ここではできない操作があります.
  • では、onActivity Created後にActivityが確立完了していることがわかります.ここまで来ると、Activityの作成に成功し、アクティブになります.いつでも使えます.
  • 次はonStartです.ここで私たちがやっていることはActivityのonStartと同じです.この方法ではFragmentは表示できますが、ユーザーと対話することはできません.onResume後にFragmentだけがユーザーと対話し始めます.このプロセスの後、Fragmentはすでに起動して実行されました.
  • はActivityを一時停止する可能性があります.ActivityのOnPauseメソッドが呼び出されます.このときFragmentのonPauseメソッドも呼び出されます.
  • システムはFragmentのビュー表示を破棄する可能性もあり、この場合onDestroyViewメソッドが呼び出されます.
  • 以降、システムがFragment全体を完全に破棄する必要がある場合、onDestroyメソッドが呼び出されます.この時、Fragmentはもうすぐ殺されるので、利用可能なすべての接続を解放する必要があります.破棄の準備中ですが、Fragmentは親Activityにバインドされています.
  • 最後のステップは、ActivityからFragmentを解放すること、すなわちonDetachメソッドを呼び出すことである.

  • Fragmentの作成方法
    Fragmentのライフサイクルを理解しました.次に、Fragmentを作成してActivityにバインドする方法を知る必要があります.最初にしなければならないことはandroidを継承することです.app.FragmentはFragmentを書きます.私たちのFragmentをFragment 1と呼ぶと、以下のように作成され定義されます.
    .html-script: .false}
        public class Fragment1 extends Fragment {
        ...
        }
    

    私たちが言ったように、FragmentはActivityにしか存在しません.そのため、どこかで定義しなければなりません.2つの方法があります.
  • はxmlレイアウトファイルで直接定義されます.
  • xmlレイアウトファイルでプレースホルダを定義し、ActivityでFragmentを動的に操作します.

  • Fragmentを定義する方法は、上記の第1の場合にonInflateメソッドが呼び出され、第2の場合にはonAttachメソッドから始まるため、ライフサイクルに影響します.
    XMLファイルでFragmentを定義するには、次の手順に従います.
    .html-script: .false}
        
    

    しかし、XMLでプレースホルダを使用する場合は、もう少し作業が必要です.
    フレームワークとFragmentのレイアウト
    XMLレイアウトファイルでFragmentを定義すると、Fragmentを自由に動的に変更することはできません.また、XMLファイルで定義する必要がある、より柔軟に操作できる方法もあります.
    .html-script: .false}
        
    

    Activityでは、Fragmentを手動で初期化し、FrameLayoutに「挿入」しなければならないため、作業を行う必要があります.
    .html-script: .false}
        public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            Fragment2 f2 = new Fragment2();
            FragmentTransaction ft = getFragmentManager().beginTransaction();
            ft.replace(R.id.fl1, f2);
            ft.commit();
        }
    

    FragmentTransactionなどについての議論は次の文章に残しておきましょう.本文はここまでです.
    原文Android Fragment Lifecycle–multiple screen support翻訳伯楽オンライン-chris