web-dev-qa-db-ja.com

<FrameLayout>に動的に添付されたフラグメントを取得しますか?

まあ、私は簡単な_<FrameLayout>_を得ました:

_<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/FragmentContainer"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent" />
_

次に、私のコードで、フラグメントを追加しました:

_FragClass aFrag = new FragClass();
getSupportFragmentManager().beginTransaction()
        .replace(R.id.FragmentContainer, aFrag).commit();
_

そして、私のコードのどこかで、ID _R.id.FragmentContainer_からFragClass (extends Fragment)オブジェクトを取得したいです。

私が試してみました

_((ViewGroup) findViewById(R.id.FragmentContainer)).getChildAt(0)
_

または

_((FrameLayout) findViewById(R.id.FragmentContainer)).getChildAt(0)
_

しかし、彼らはそれに添付されたViewの代わりにFragmentを返しています。

変数aFragをどこかに保持できることを知っているので、再度見つける必要はありません。しかし、それを取り戻す方法があるはずです。

37
midnite

完全な回答でまとめましょう:)

この場合、動的に追加されたFragmentは、コンテナーのIDを使用しますViewViewGroup)。

参照: http://developer.Android.com/guide/components/fragments.html#Adding

注:各フラグメントには、アクティビティが再開された場合にシステムがフラグメントの復元に使用できる一意の識別子が必要です(これを使用して、フラグメントを取り除いてトランザクションを実行することができます)。フラグメントのIDを提供するには、次の3つの方法があります。

  • Android:id属性に一意のIDを指定します。
  • Android:tag属性に一意の文字列を指定します。
  • 前の2つのどちらも指定しない場合、システムはコンテナビューのIDを使用します。

それはFragmentであるため、getSupportFragmentManager().findFragmentById()を使用して取得する必要があり、findViewById()の代わりにFragentを返します。 View

したがって、この問題に対する答えは次のようになります。

((aFrag) getSupportFragmentManager().findFragmentById(R.id.FragmentContainer))

@ Luksprogに感謝します。

85
midnite