Добавление поддержки фрагментов в 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 или выше, эта реализация все еще используется; он не пытается переключиться на реализацию фреймворка.
Фрагменты поддержки всегда будут использованы. Обычно это не проблема.