2012-04-15 2 views
61

Я ознакомился с документацией о Fragments в Руководстве для разработчиков Android, и я видел, что иногда они указывают, что класс должен создавать экземпляр с атрибутом тега фрагмента android: name и когда они используют класс: атрибут:Вид деятельности: Класс фрагмента: vs android: атрибуты имени

<fragment 
    android:name="com.example.news.ArticleReaderFragment" 
    android:id="@+id/viewer" 
    android:layout_weight="2" 
    android:layout_width="0dp" 
    android:layout_height="match_parent" /> 

<fragment 
    class="com.example.android.apis.app.FragmentLayout$TitlesFragment" 
    android:id="@+id/titles" 
    android:layout_weight="1" 
    android:layout_width="0px" 
    android:layout_height="match_parent" /> 

ли андроид: имя и класс: взаимозаменяемы? Если я использую функцию автозаполнения в Eclipse, они оба показывают один и тот же советник (т. Е. Атрибут предоставляет имя класса для создания экземпляра). Может быть, вы должны использовать второй, когда класс, который будет создан, имеет имя, отличное от имени файла java, например TitlesFragment, которое находится в файле FragmentLayout.java? Или я могу использовать синтаксис package.fileDOTjava $ Класс также с android: name атрибут?

Я хотел бы иметь документацию для XML-тегов и атрибутов, как и для Java Java-классов (я спросил об этом еще в одном question).

ответ

23

Андроид: наименование и класс: сменный?

Предположительно, да. Я использовал только class, и это похоже на то, что использует большинство примеров Google, но я вижу, где они используют android:name в некоторых образцах. К сожалению, формальной и полной документации для <fragment> нет.

+0

Я действительно хотел была документация. Поскольку 'class' не имеет пространства имен, мне любопытно, не использовался ли этот атрибут во время разработки фрагментов, но остался, потому что теперь они не могут сломать совместимость. Для последовательности, 'android: name' кажется настолько немного предпочтительным, и, как указал пользователь1550716, они выглядят взаимозаменяемыми. – spaaarky21

+0

@ spaaarky21: Да, я перешел на «android: name» всюду. – CommonsWare

+1

Дополнительное доверие к использованию имени и класса: IntelliJ IDEA использует/autofills атрибут name в своем последнем редакторе макетов (v13) – rmirabelle

39

Как источник Activity.onCreateView говорит:

String fname = attrs.getAttributeValue(null, "class"); 
TypedArray a = context.obtainStyledAttributes(attrs, com.android.internal.R.styleable.Fragment); 
if (fname == null) { 
    fname = a.getString(com.android.internal.R.styleable.Fragment_name); 
} 

Это, казалось бы, это означает, что программа выглядит "класс" приписывать первым. И при ошибке выглядит атрибут «имя». Так насколько это верно, если использовать «класс», если он более эффективен.

+1

Я только что проверил, основной шаблон, предоставленный Android Studio 2.0, по умолчанию использует атрибут name: xxx. – yask

+0

«Атрибут android: name в определяет класс фрагмента для создания экземпляра в макете». Это определение, которое я видел на веб-сайте разработчика. Страница: [link] (https://developer.android.com/guide/components/fragments.html). –

0

К сожалению всех экспертов здесь, я могу ошибаться, но согласно моему знанию андроида: имя атрибута фрагмента используется для поиска фрагмента, когда мы используем getFragmentByTag() метода класса fragmentManager. также android: class Атрибут используется для определения класса фрагмента, который мы обычно указываем для статического фрагмента .

Надеется, что это поможет .. спасибо

+1

Согласно [этой странице] (http://developer.android.com/reference/android/app/Fragment.html), для этого используется атрибут 'android: tag', что имеет смысл:' android: tag может используется в , чтобы предоставить конкретное имя тега для фрагмента – user1978019