Подтвердить что ты не робот

Получить фрагмент динамически привязан к <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();

И где-то еще в моем коде, я хочу получить этот объект FragClass (extends Fragment) из идентификатора R.id.FragmentContainer.

Я пробовал

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

или

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

но они возвращают View вместо прикрепленного к нему символа Fragment.

Я знаю, что могу сохранить переменную aFrag где-то, поэтому мне не нужно ее снова искать. Но я верю, что должен быть способ ее вернуть.

4b9b3361

Ответ 1

Позвольте мне закончить полным ответом :)

В этом случае динамически добавляемый Fragment использует идентификатор контейнера View (ViewGroup).

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

Примечание. Для каждого фрагмента требуется уникальный идентификатор, который система может использовать для восстановления фрагмента в случае перезапуска действия (и который можно использовать для захвата фрагмента для выполнения транзакций, таких как удаление). Существует три способа предоставления идентификатора для фрагмента:

  • Укажите для атрибута android: id уникальный идентификатор.
  • Укажите для атрибута android: tag уникальную строку.
  • Если вы не укажете ни один из двух предыдущих, система использует идентификатор представления контейнера.

Это потому что это Fragment в конце концов. Мы должны использовать getSupportFragmentManager().findFragmentById(), чтобы получить его, который возвращает Fragment, вместо findViewById(), который возвращает View.

Таким образом, ответ на эту проблему будет следующим:

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

Благодаря @Luksprog.