2013-05-21 3 views
1

Я задал вопрос некоторое время назад:Как использовать фрагменты в Android правильно

Replacing Fragments isn't working/Am I executing this the proper way?

Потому что у меня был очень трудное время оборачивать вокруг моей головы всей концепции. Предыдущие видеоролики Google I/O также помогли, но у меня все еще не было причин использовать фрагменты. Я снова столкнулся со своей проблемой, и с большим количеством поисков и видеороликов Google I/O 2013 я ударил еще одну развилку на дороге. После того, как вы начали получать награду, чтобы получить более экспертное мнение по этому вопросу, я был ориентирован на использование FrameLayouts, но в этом видео I/O 13 в 19:05 в video он показывает <fragment>. Может ли кто-нибудь прояснить любые расхождения или неправильные представления, которые у меня есть?

Использую ли я <fragment> или <frameLayout>? Бонусные баллы, если вы посмотрите на мой оригинальный вопрос, чтобы узнать, откуда я.

+0

'FrameLayout' не связан с фрагментами, это единственная группа просмотра с одним ребенком. Пример, который вы видели, вероятно, использует «FrameLayout» как контейнер фрагмента, который позже может быть заменен другим. – tbruyelle

ответ

4

Есть два отдельных вопроса, которые я вижу здесь; (1) что такое элемент <fragment>? (2) Я (что означает, что вы) делаете то, что я пытался сделать в своем предыдущем вопросе наилучшим образом, используя FrameLayout?.

Я постараюсь ответить на оба.

XML-тег <fragment> - это еще один способ реализации фрагмента. Как обновитель, Fragment является частью деятельности. Это самостоятельный класс, однако, обращаясь к fragment documentation, потому что Fragment предназначен для модульной работы, все фрагменты должны быть размещены в отдельном FragmentActivity. Подумайте об этом как FragmentActivity в качестве контейнера. Загружая Fragment в FragmentActivity, FragmentActivity предоставляет другие ценные функции, к которым у класса Fragment нет доступа к ним самостоятельно. Он также предлагает вам возможность динамически менять фрагменты, что позволяет использовать более гибкий пользовательский интерфейс.

Как вы загружаете Fragment в его содержащий FragmentActivity, зависит от того, что вы пытаетесь выполнить. Один из способов сделать это - использовать тег <fragment>. При таком подходе вместо объявления Fragment в Java-коде активности и затем загрузки его FragmentTransaction, как и в предыдущем вопросе, класс Fragment загружается через XML-макет для содержащего FragmentActivity.

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"   
    android:orientation="horizontal"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent">  


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

</LinearLayout> 

Вы можете увидеть фрагмент, указанный здесь, в примере, взятом из андроидных документов. Затем фрагмент загружается FragmentActivty, когда setContentView() называется onCreate.

public class MainActivity extends FragmentActivity {  
    @Override  
    public void onCreate(Bundle savedInstanceState) {   
    super.onCreate(savedInstanceState);   
    setContentView(R.layout.news_articles);  
    } 
} 

Другой способ отображения фрагментов - как вы это делали в своем предыдущем примере. Используя FragmentManager, вы можете создать новый экземпляр класса Fragment и загрузить его программно в код Java.

Итак, какая техника имеет смысл, когда? В качестве примера из демонстраций docs для Android используется метод фрагмента XML, когда вы используете неподвижные фрагменты, т. Е. Вы не динамически меняете фрагменты внутри и снаружи. Это связано с тем, что вы не можете редактировать XML-макет, который вы создаете «на лету» так же, как и код Java. Кроме того, из того, что я могу сказать, использование XML-подхода относится к фрагментам, более похожим на элементы макета, выделяющие различные элементы управления. В примере для Android они используют XML-подход для отображения 2 фрагментов бок о бок на планшете. Контролируя фрагменты, более похожие на элементы компоновки, например.имея возможность настроить layout_weight, вы можете добиться лучшего результата для этой цели.

Однако, если вы разрабатываете высокодинамичное UX, скажем, с ViewPager или какой-либо другой функции, где фрагменты будут повернуты на регулярной основе, это имеет смысл использовать раздельные Fragment классы и заменить эти Fragments, поскольку они становятся необходимыми.

Основываясь на вашем предыдущем вопросе и необходимости динамического обмена фрагментами, я думаю, что вы сделали правильный выбор для этой реализации.

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