40

さて、私は簡単になりました<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();

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

私が試してみました

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

また

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

しかし、彼らはそれに添付されているViewのではなく、を返しています。Fragment

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

4

1 に答える 1

94

完全な答えで締めくくりましょう:)

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

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

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

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

やっぱりだからFragmentです。を使用getSupportFragmentManager().findFragmentById()して取得する必要があります。これは、を返すのFragmentではなく、findViewById()を返しますView

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

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

@Luksprogに感謝します。

于 2013-03-20T11:38:39.017 に答える