Как я могу получить фрагмент из представления?

Я добавил несколько Fragment в TableLayout и я хочу управлять ими из своей Activity , поэтому я использовал это:

 Fragment fragment = (Fragment) tableLayout.getChildAt(i); 

Но getChildAt(int) возвращает View а View не может быть добавлен в Fragment

Solutions Collecting From Web of "Как я могу получить фрагмент из представления?"

Я не знаю, почему люди голосуют за ваш вопрос. Fragments могут быть очень запутанными порой, особенно для новичков. Чтобы понять вашу проблему, вы должны узнать, что такое Fragment и они используются.

Для начала, View – это то, что существует на экране. Примеры включают: TextView , EditText , Button и т. Д. Они размещаются внутри XML-макетов. Эти макеты отображаются с помощью Activity .

Теперь Fragment – это не View . Он вообще не существует на экране. Вместо этого это класс, который просто управляет «макетом» – подобным виду Activity . Если вам нужен View, возвращаемый onCreateView() Fragment, вы можете напрямую использовать findViewById() в своей Activity .

Если вам нужна ссылка на ваш фрагмент, есть два возможных способа сделать это:

1) Если вы добавили Fragment программно, как это

 getFragmentManager() .beginTransaction() .replace(R.id.fragmentContainer, myFragment, myFragmentTAG) .commit(); 

Вы можете использовать:

 MyFragment myFragment = (MyFragment) getFragmentManager().findFragmentByTag(myFragmentTAG); 

2) Если вы добавили фрагмент внутри XML-макета, например:

 <fragment android:name="com.example.android.fragments.HeadlinesFragment" android:id="@+id/fragmentContainer" android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" /> 

Вы можете использовать это:

 getFragmentManager().findFragmentById(R.id.fragmentContainer); 

В основном, у каждой активности есть класс FragmentManager который поддерживает все активные Fragments , и есть два способа их поиска: использование уникальной TAG, которую вы передаете, пока показываете фрагмент, или передаете идентификатор контейнера, где был добавлен фрагмент.

Вы не можете получить такой фрагмент. Вам нужно будет добавить фрагмент с тегом и получить его с помощью этого тега.

Для добавления фрагмента выполните следующие действия:

 getFragmentManager().beginTransaction().add(R.id.container, fragment, "tagTofindFragment"); 

Получить фрагмент:

 fragment = getFragmentManager().findFragmentByTag("tagTofindFragment"); 

Здесь tagTofindFragment – это тег, который должен быть уникальным среди ваших фрагментов.