0

У моего приложения для Android есть требование, когда определенный поток имеет 7 разных экранов. Теперь каждый из этих экранов имеет общий верх и низ. Поэтому я решил создать FragmentActivity и 7 разных Fragments. Как вставить фрагменты в FragmentActivity во время выполнения? Я прочитал этот учебник here, и в соответствии с этим учебник мой главный FragmentActivity должен иметь следующую структуру:Использование макета фрагмента

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <FrameLayout 
     android:id="@+id/fragment_content" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" /> 

</LinearLayout> 

И он должен использовать следующий код, чтобы заменить фрагмент:

FragmentManager fm = getSupportFragmentManager(); 
Fragment fragment = fm.findFragmentById(R.id.fragment_content); 

if (fragment == null) { 
    FragmentTransaction ft = fm.beginTransaction(); 
    ft.add(R.id.fragment_content, new BasicFragment()); 
    ft.commit(); 
} 

Что дон «т понять, является следующая строка:

ft.add(R.id.fragment_content, new BasicFragment()); 

R.id.fragment_content является FrameLayout, будет ли это вставить фрагмент в FrameLayout или что?

+0

Он должен быть с помощью 'tag' идентифицировать' Fragment'. Вы используете 'id', если ваши' Fragment 'находятся в xml, что здесь не так, вы добавляете их программно (лучший подход). –

ответ

0

R.id.fragment_content - это FrameLayout? будет ли это вставить фрагмент в framelayout или что?

Из того, что я помню, над ним размещается макет фрагмента. Под ним у него есть другой макет, который является «наклейкой» на макете контейнера. Так что это торт. Чтобы удержать эту «наклейку», я думаю, вы можете позвонить .getParent() в корневом представлении фрагмента.

О, и фрагменты тегов, чтобы легко найти их через FragmentManager (хотя поиск тегов довольно дорогой).

0

Вы можете посмотреть на это, как будто у вас есть бассейн (ваш FrameLayout в этом случае), в который вы можете бросить игрушечные корабли (ваш Fragments). Таким образом, в основном вам нужна среда, чтобы содержать вас Fragments, и это может быть любой макет, который вы выберете.

Так что вы делаете здесь:

Fragment fragment = fm.findFragmentById(R.id.fragment_content); 

неправильно, потому что R.id.fragment_content не Fragment но FrameLayout.

, но это может быть вашим Fragment контейнером, так что вам нужно создать класс, который extends Fragment с его собственным макетом и сделать операцию, которую вы сделали здесь:

FragmentManager fm = getSupportFragmentManager(); 
FragmentTransaction ft = fm.beginTransaction(); 
ft.add(R.id.fragment_content, new BasicFragment(), tag); //add a tag to a fragment during the transaction so you could easily retrieve it later. 
ft.commit(); 

и, конечно, вы могли бы понять намного больше о фрагменты, читая эту страницу:

http://developer.android.com/guide/components/fragments.html

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