序文
JavaとAndroidを1年近く学習した後、この期間の結果は、Androidクライアントを独立して完成させ、メインラインバージョンの安定性を確保することです。期間中、私は多くのピットに遭遇しました、そして、私は兄弟と多くのAndroidの知識も学びました。しかし、人々は常に変化を受け入れなければなりません。ここでは、以前のアイテムで使用されていた最も断片を要約します。
フラグメントの紹介
フラグメントは、アクティビティのユーザーインターフェイスの動作または一部として理解でき、アクティビティにネストする必要があります。しかし、フラグメントには独自のXMLレイアウトファイルがあり、したがって、特別なケースではフラグメントを簡単にアクティビティに置き換えることができます。
フラグメントを作成します
フラグメントを作成し、XMLレイアウトファイルとJavaクラスを実装する必要があります。
XMLレイアウトファイルは、他のレイアウトファイルと同じです。
<?XMLバージョン= "1.0" encoding = "utf-8"? match_pareat "android:Orientation =" Vertical "> <textView android:id ="@+id /textView "android:layout_width =" android:la yout_height = "wrap_content" android:text = "@string /testview" / / / / / > <button android:id = "@+id /button" android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:text = "@string /button" /> < /linearlayout>
一般的に、Javaコードでは、必要に応じて次のライフサイクル方法を実装できます。
1。Onattach():フラグメントがアクティビティに依存している場合、この方法でアクティビティハンドルを取得して、フラグメントとアクティビティの間のコミュニケーションを実現できます。
2。OnCreate():フレームを初期化します。
3。ONCREATEVIEW():Fragmentの初めてユーザーインターフェイスを描画するときに、システムはこのメソッドを呼び出します。
4。OnActivityCreated():ホストアクティビティOnCreate関数によって実行された後、この方法でFragment独自のウィジェットインスタンスとビジネスロジック処理を実行できます。
5。ondestoryView():フレームが破壊され始めたときに呼び出します。
6。Onstart():フラグメントが表示されたときに呼び出します。
また、フラグメントのライフサイクルを操作するために使用される他の多くのコールバック関数もあります。
フラグメントライフサイクル
各フラグメントには、独自のライフサイクルコールバックメソッドのセットがあり、独自のユーザー入力イベントを処理します。対応するライフサイクルを下の図に示します。
アクティビティにフラグメントを追加します
まず第一に、あなたはacitivityがフラグメントをサポートすることを確認する必要があるため、通常、活動はフラグメンタクティブから継承する必要があります。通常、アクティビティにフラグメントを追加する方法は2つあります。静的と動的です。
静的メソッドは、以下に示すように、アクティビティのXMLレイアウトファイルにフラグメントを直接追加します。
<?XMLバージョン= "1.0" encoding = "utf-8"? match_pareant "android:baselinealigned =" false "android:" horizontal "> <fragment android:"@+id/first "android:name =" com。 layout_height = "match_parent" android:layout_weight = "1" /> <fragment android:id = "@+id /second" android:name = "com.example.se condfragment" android:layout_width = "0dp" android:layout_height = = "match_parent" android:layout_weight = "1" /> < /linearlayout>
Android:name属性の属性がレイアウトにインスタンス化されたフラグメントクラスを指定すると、レイアウトファイルの各フレームをインスタンス化し、それぞれを取得するためにそれらを呼び出します。システムは、<Fragment>要素の位置によって返されるビューを直接挿入します
注:各フラグメントでは、一意の識別が必要です。システムを使用してフラグメントを復元できます(および除去などのフラグメントのトランザクション処理をキャプチャできます。フラグメントにIDを提供するには3つの方法があります。3つの方法があります。
動的方法
フラグメントトランセーションを使用します。フラグメントトランスセーションのAPIを使用して、アクティビティの断片を動作させることができます(フラグメントの追加、削除、交換など)。参照コードは次のとおりです。
fragmentmanager fragmentmanager()fragmenttransaction fragmentmanager.begintraction();
Add()関数の最初のパラメーターは、リソースID(リソースID)で指定されているフラグメントのビューグループです。 FragmentTranscationによって変更されると、Commit()視覚的な変更で有効になります。
フラグメント通信
フラグメントは直接伝達されるべきではなく、それらの間の相互作用はホストアクティビティを通じて実行する必要があります。フラグメントとacitivityと相互作用するには3つの方法があります。
1。アクティビティは、パラメーターを含むフラグメントを作成します。
2。アクティビティは、フラグメントのオブジェクトハンドルを維持します。これは、ハンドルを介してフラグメントのパブリックメソッドと直接呼び出すことができます。
3。フラグメントは、Onattach関数で定義されたリスナーハンドルを取得できます。
パラメーターを使用してフレームを作成します
いくつかの特定の場合、フラグメントは初期化するために特定のパラメーターを必要とする場合があります。フラグメントには1つの高麗人参コンストラクターのみが必要なため、静的newinginstanceメソッドを使用してパラメーターを持つフラグメントを作成することを検討できます。例コードは次のとおりです。
Android.os.bundle.support.v4.fragmentのインポート。 ;; "num);
アクティビティにパラメーターを含むパラメーターを単純にロードできます。
fragmenttransaction ft = getsuptragmentmanager()
フラグメントを呼び出す方法
アクティビティは埋め込まれたフラグメントハンドルを取得できるため、このメソッドはフラグメントハンドルを介して直接呼び出すことができます。
パブリッククラスのテストフラグメントはフラグメントを拡張します{public void dosomething(string param){//フラグメントで何かを行う}}}}アクティビティでは、このメソッドをフラグメントのオブジェクトハンドルを介して直接呼び出すことができます。
パブリッククラスのメインは、fragmentActivity {bundle savedanceState){savedincestate(savedincestate)= testfragment.dosomething();フラグメントリスナー
フラグメントがアクティビティにイベントを共有する必要がある場合、この方法を使用する必要があります。フラグメントはインターフェイスを定義し、このインターフェイスはアクティビティによって実装されます。インターフェイスのアクティビティは、Onattach()メソッドで達成されます。
フラグメント内の定義されたインターフェイスコードは次のとおりです。
Android.support.v4.app.fragmentをインポートしますパブリックインターフェイスを通信するために使用onitemselectlistener {public void onrsesitemselect(string link);} // fragmentが@override public void onattach(アクティビティ){super.onattach(activity(activity(activity)が添付された場合にイベントが発生するリスナー(アクティビティ)を保存します。 ); onitemselectedlistenerのアクティビティインスタンス{リスナー=(onitemselectlistener)アクティビティ;} listener.onrssitemselect( "some link");}}アクティビティにこのインターフェイスを実装してください。
Android.support.v4.app.FragmentActityは、fragmentActivityを拡張します。 detailfragment);} // fragment event files @override public void onrsiTemSelect(string link){if(fragment!= null && fragment.isinlayout()){fragment.settext(link(link(link(link))fragment event files @override public void onrseSitemselect(string link){link(link(link))がアクティブに定義できるようになりました。 );}}}