Макет деятельности: класс фрагмента: vs android: атрибуты name

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

<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" />

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

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

Ответ 1

Как указывает источник 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);
}

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

Ответ 2

Являются ли андроид: имя и класс: взаимозаменяемы?

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

Ответ 3

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

Надеюсь, это поможет.. спасибо