Androidラーニングシリーズ-Fragment
5883 ワード
Android Fragment
について
FragmentはActivityのサブモジュールを表しているので、FragmentはActivityフラグメントとして理解できる.Fragmentは、自分のライフサイクルに使用したり、自分の入力イベントを受け入れたりすることができます.
FragmentはActivityに「埋め込まれる」必要があるため、Fragmentも独自のライフサイクルを持っているが、FragmentのライフサイクルはActivityのライフサイクルによって制御される.たとえば、Activityが一時停止すると、Activity内のすべてのFragmentが一時停止します.Activityが破棄されると、Activity内のすべてのFragmentが破棄されます.Activityがアクティブな場合にのみ、プログラマはメソッドによって独立してFragmentを操作できます.
fragmentが導入されたのは、応答型の適合のためです.
例:tablet,phone
Activityと同様にFragmentにも次のような状態がある.アクティブ:現在のFragmentはフロントにあり、ユーザーが表示され、フォーカスを得ることができます. 一時停止状態:他のActivityはフロントにあり、このFragmentは依然として見えますが、フォーカスは得られません. 停止状態:このFragmentは表示されず、焦点を失う. 破棄ステータス:Fragmentが完全に削除されたか、Fragmentが存在するActivityが終了した.
Fragmentフィーチャー Fragmentは常にActivityインタフェースの構成部分として機能し、FragmentはgetActivity()メソッドを呼び出してその存在するActivityを取得し、ActivityはFragmentManagerのfindFragmentByld()またはfindFragmentByTag()メソッドを呼び出してFragmentを取得する. Activityの実行中に、FragmentManagerのadd()、remove()、replace()メソッドを呼び出して、Fragmentを動的に追加、削除または置換できます. —複数のFragmentを同時に組み合わせることができるActivity.逆に、1つのFragmentをマルチActivityで多重化することもできる. Fragmentは、自分の入力イベントに応答し、自分のライフサイクルを持つことができますが、それらのライフサイクルは、その属するActivityのライフサイクルによって直接制御されます.
fragmentの作成
fragmentクラス関係
ライフサイクルコールバックメソッド
開発Fragmentは開発Activityとよく似ていますが、開発ActivityはActivityまたはそのサブクラスを継承する必要があるだけです.しかし、Fragmentの開発にはFragmentとそのサブクラスを継承する必要があり、同時にActivityコールバックメソッドに書かれていたコードをFragmentのコールバックメソッドに「移動」すればよい.
sample
Fragmentとactivityのインタラクション
fragmentをactivityに適用する方法レイアウトファイルに追加:レイアウトファイルに要素を使用してFragmentを追加します.android:nameプロパティはFragmentの実装クラスを指定する必要があります. JavaコードでFragmentTransactionオブジェクトのrelpace()またはadd()メソッドによってFragmentを置き換えまたは追加します.ActivityのgetFragmentManager()メソッドはFragmentManagerに戻り、FragmentManagerのbeginTransaction()メソッドを呼び出してFragmentTransactionオブジェクトを取得します.
ActivityでFragmentを取得し、Fragmentでactivityを取得する方法: Fragmentが存在するActivity:FragmentのgetActivity()メソッドを呼び出すと、その存在するActivityが返されます. Activityが含むFragmentを取得するには、Activityに関連付けられたFragmentManagerのfindFragmentByld(int id)メソッドまたはfindFragmentByTag(String tag)メソッドを呼び出すと、指定したFragmentを取得できます. インタフェースレイアウトファイルで要素を使用してFragmentを追加する場合、要素に対してandroid:idまたはandroid:tag属性を指定できます.この2つの属性はFragmentを識別するために使用できます.その後、ActivityはfindFragmentByld(int id)またはfindFragmentByTag(String tag)を使用してFragmentを取得できます.
FragmentとActivityは、データを相互に伝達する方法も必要かもしれません.
ActivityからFragmentへのデータ転送:ActivityでBundleパケットを作成し、FragmentのsetArguments(Bundle bundle)メソッドを呼び出してBundleパケットをFragmentに転送します.
FragmentがActivityにデータまたはActivityを渡すには、Fragmentの実行中にリアルタイムで通信する必要があります.Fragmentで内部コールバックインタフェースを定義し、Fragmentを含むActivityにコールバックインタフェースを実装させることで、Fragmentはコールバックメソッドを呼び出してActivityにデータを渡すことができます.
FragmentManagementの機能 findFragmentByld()またはfindFragmentByTag()メソッドを使用して、指定されたFragmentを取得します. popBackStack()メソッドを呼び出して、バックグラウンドからFragmentをポップアップします(ユーザーがBACKキーを押すのをシミュレートします). は、addOnBackStackChangeListener()を呼び出して、バックグラウンドスタックの変化をリスニングするためのリスナーを登録する.Fragmentを追加、削除、置換する必要がある場合は、FragmentTransactionオブジェクトを使用する必要があります.FragmentTransactionは、ActivityがFragmentに対して実行する複数の変更を表します.
ragmentTransactionもFragmentトランザクションに翻訳されています.データベース・トランザクションと同様に、データベース・トランザクションは最下位配列に対する複数の更新操作を表します.Fragmentトランザクションは、ActivityがFragmentに対して実行する複数の変更操作を表します.
各FragmentTransactionは、複数のadd()、replace()、remove()アクションを呼び出し、最後にcommit()を呼び出してトランザクションをコミットするなど、FragmentTransactionに対する変更を複数含めることができます.
commit()を呼び出す前に、開発者はaddToBackStack()を呼び出してトランザクションをbackスタックに追加することもできます.このスタックはActivityが管理し、BACKボタンを押して前のFragment状態に戻ることができます.
について
FragmentはActivityのサブモジュールを表しているので、FragmentはActivityフラグメントとして理解できる.Fragmentは、自分のライフサイクルに使用したり、自分の入力イベントを受け入れたりすることができます.
FragmentはActivityに「埋め込まれる」必要があるため、Fragmentも独自のライフサイクルを持っているが、FragmentのライフサイクルはActivityのライフサイクルによって制御される.たとえば、Activityが一時停止すると、Activity内のすべてのFragmentが一時停止します.Activityが破棄されると、Activity内のすべてのFragmentが破棄されます.Activityがアクティブな場合にのみ、プログラマはメソッドによって独立してFragmentを操作できます.
fragmentが導入されたのは、応答型の適合のためです.
例:tablet,phone
tablet-main-activity{
navFragment + contentFragment
}
phone-main-activity {
navFragment
}
phone-content-activity{
contentFragment
}
Activityと同様にFragmentにも次のような状態がある.
Fragmentフィーチャー
fragmentの作成
fragmentクラス関係
android.app.Fragment
extends Object
implements ComponentCallbacks2 View.OnCreateMenuListener
subclass
DialogFragment, ListFragment, PreferenceFragment, WebViewFragment
ライフサイクルコールバックメソッド
// Fragment Activity 。
onAttatch()
// Fragment ,
// Fragment , fragment 。
onCreate() ->
// Fragment 。 View,
// View Fragment View。
onCreateView() ->
// Fragment Activity
onActivityCreated()
// Fragment
onStart ->
// Fragment ,onStart() ()onResume()
onResume ->
// Fragment 。
onPause ->
onStop() ->
// Fragment View
onDestroyView() ->
// Fragment 。 。
onDestroy() ->
// Fragment Activity 、 ,onDestroy()
// onDetach() 。 。
onDetach()
開発Fragmentは開発Activityとよく似ていますが、開発ActivityはActivityまたはそのサブクラスを継承する必要があるだけです.しかし、Fragmentの開発にはFragmentとそのサブクラスを継承する必要があり、同時にActivityコールバックメソッドに書かれていたコードをFragmentのコールバックメソッドに「移動」すればよい.
sample
public class BookDetailFragment extends Fragment
{
public static final String ITEM_ID = "item_id";
// Fragment Book
BookContent.Book book;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// Fragment ITEM_ID
if (getArguments().containsKey(ITEM_ID))
{
book = BookContent.ITEM_MAP.get(getArguments()
.getInt(ITEM_ID)); //①
}
}
// , View Fragment
@Override
public View onCreateView(LayoutInflater inflater
, ViewGroup container, Bundle savedInstanceState)
{
// /res/layout/ fragment_book_detail.xml
View rootView = inflater.inflate(R.layout.fragment_book_detail,
container, false);
if (book != null)
{
// book_title book title
((TextView) rootView.findViewById(R.id.book_title))
.setText(book.title);
// book_desc book desc
((TextView) rootView.findViewById(R.id.book_desc))
.setText(book.desc);
}
return rootView;
}
}
Fragmentとactivityのインタラクション
fragmentをactivityに適用する方法
ActivityでFragmentを取得し、Fragmentでactivityを取得する方法:
FragmentとActivityは、データを相互に伝達する方法も必要かもしれません.
ActivityからFragmentへのデータ転送:ActivityでBundleパケットを作成し、FragmentのsetArguments(Bundle bundle)メソッドを呼び出してBundleパケットをFragmentに転送します.
FragmentがActivityにデータまたはActivityを渡すには、Fragmentの実行中にリアルタイムで通信する必要があります.Fragmentで内部コールバックインタフェースを定義し、Fragmentを含むActivityにコールバックインタフェースを実装させることで、Fragmentはコールバックメソッドを呼び出してActivityにデータを渡すことができます.
FragmentManagementの機能
ragmentTransactionもFragmentトランザクションに翻訳されています.データベース・トランザクションと同様に、データベース・トランザクションは最下位配列に対する複数の更新操作を表します.Fragmentトランザクションは、ActivityがFragmentに対して実行する複数の変更操作を表します.
各FragmentTransactionは、複数のadd()、replace()、remove()アクションを呼び出し、最後にcommit()を呼び出してトランザクションをコミットするなど、FragmentTransactionに対する変更を複数含めることができます.
commit()を呼び出す前に、開発者はaddToBackStack()を呼び出してトランザクションをbackスタックに追加することもできます.このスタックはActivityが管理し、BACKボタンを押して前のFragment状態に戻ることができます.