Добавление поддержки фрагментов в API 10

Я создавал приложение, которое до недавнего времени minSdkVersion="14", но я хочу изменить это и добавить совместимость для API 10. Первая проблема у меня была со стилями, но я решил исправить это с помощью Theme.AppCompat, Теперь у меня есть проблемы в моем коде, во-первых, я использую много фрагментов.

Первые фрагменты, которые появляются в моем приложении:

FirstRunNotice firstRunNotice = new FirstRunNotice();
firstRunNotice.show(getFragmentManager(), "WhatDoesThisStringEvenDo?");
//.show method gives an error

Это просто внутренний класс в моей деятельности, который расширяет DialogFragment, Как мне заставить это работать на API 10? Если я изменю это на android.support.v4.app.DialogFragment кажется, что он убирает ошибки (используя Android Studio), но это странно, потому что, если я использую его в одном внутреннем классе (у меня есть DialogFragments), он устраняет ошибку в обоих. Это почему?

Кроме того, если бы я изменил все Fragment расширенные классы до android.support.v4.app.Fragment, .DialogFragment, .ListFragment... Что бы это сделало, если бы я запустил свое приложение с более высоким API, скажем, 19? Будет ли приложение использовать библиотеку совместимости или будет известно использование класса из этого API? И есть ли разница?

1 ответ

Решение

Так как теперь вы хотите поддерживать Gingerbread и ниже, вы должны использовать android.support.v4.app.* Фрагмент классов для вашего приложения для компиляции и запуска. Призыв к getFragmentManager() следует также заменить на getSupportFragmentManager()

Также важно отметить, что getSupportFragmentManager() это только часть FragmentActivityа также ActionBarActivity (последний является продолжением первого. Он является частью библиотеки Google ActionBarCompat).

Это связано с тем, что фрагменты поддержки являются дополнением к системе Android, поэтому должен быть способ реализовать их, не слишком полагаясь на внутреннее устройство Android (поскольку Gingerbread и более низкие понятия не имеют понятия о Fragment).

но это странно, потому что, если я использую его в одном внутреннем классе (у меня есть DialogFragments), он устраняет ошибку в обоих. Это почему?

Вероятно, вы столкнулись с несколькими ошибками Android Lint

Что бы это сделало, если бы я запустил свое приложение на более высоком API

Ничего, библиотека поддержки работает и с новыми версиями API. Конечно, если у вас был предыдущий код, который требовал API 11+, то вам также нужно найти способ для бэкпорта.

Будет ли приложение использовать библиотеку совместимости или будет известно использование класса из этого API?

Поддержка Fragment Документация гласит:

При работе на Android 3.0 или выше, эта реализация все еще используется; он не пытается переключиться на реализацию фреймворка.

Фрагменты поддержки всегда будут использованы. Обычно это не проблема.

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