2015-07-31 2 views
17

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

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

но getChildAt(int) возвращает View и View НЕ может бросить в Fragment

+0

Как добавить фрагмент? Через XML теги или с помощью FragmentManager в Java? – Nachi

+0

Я добавил их с помощью FragmentManager – Mohammad7G

ответ

25

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

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

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

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

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

getFragmentManager() 
    .beginTransaction() 
    .replace(R.id.fragment_container_viewgroup, myFragment, FRAGMENT_TAG) 
    .commit(); 

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

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

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, и есть два способа их нахождения: Используя уникальный тег, который вы проходите в то время как показывая фрагмент или передача идентификатора вида контейнера, в который был добавлен фрагмент.

2

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

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

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

, чтобы получить фрагмент:

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

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

Смежные вопросы