Схема деятельности: Класс фрагмента: против Android: атрибуты имени

Я прочитал документацию по Фрагментам в Руководстве для разработчиков Android и видел, что иногда они указывают класс для создания экземпляра с атрибутом тега Fragment android:name, а иногда используют атрибут class::

<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$Class также с атрибутом android:name?

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

3 ответа

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

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

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

Другие вопросы по тегам