Урок 114. Android 3. Библиотека Support Library. Зачем нужна и как ее использовать на примере фрагментов

Обсуждение уроков
Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Урок 114. Android 3. Библиотека Support Library. Зачем нужна и как ее использовать на примере фрагментов

Сообщение damager82 » 25 ноя 2012, 23:00

В этом уроке:
- разбираемся, зачем нужна библиотека Support Library
- на примере фрагментов используем библиотеку v4


Click here to read this article!
Последний раз редактировалось damager82 25 май 2017, 13:37, всего редактировалось 5 раз.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

Re: Урок 114. Android 3. Библиотека Support Library. Зачем н

Сообщение AndreyI » 26 ноя 2012, 21:32

Кстати, полезно знать, что -v4 в конце файла библиотеки jar, есть ни что иное, как квалификатор, примерно такой же как мы используем для папок с ресурсами, с аналогичным поведением.Т.е. это указание исполняемой среде какую библиотеку использовать в зависимости от версии API, непосредственно при исполнении. Если используете свои библиотеки и в зависимости от версии системы должен выполнятся разный код, можно поместить все эти библиотеки в папку libs с одинаковыми именами, но с разными окочаниями для соответствующих версий API. Разумеется, в библиотеках имена классов и сигнатуры методов должны совпадать. Не знаю насколько реально отлажен этот механизм, но задумка у разработчиков Андроид именно такая.

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 114. Android 3. Библиотека Support Library. Зачем н

Сообщение damager82 » 27 ноя 2012, 14:44

AndreyI писал(а):-v4 в конце файла библиотеки jar, есть ни что иное, как квалификатор
Не знал про это, интересно!
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Digetix
Сообщения: 117
Зарегистрирован: 12 окт 2012, 15:31

Re: Урок 114. Android 3. Библиотека Support Library. Зачем н

Сообщение Digetix » 07 дек 2012, 11:33

Доброго времени суток. Подскажите, пожалуйста, с помощью какой библиотеки возможно сделать интерфейс похожий на 4.. и чтоб он был на всех версиях ? И возможно ли вообще такое сделать? Чтоб Меню было с тремя точками и вверху навигация. Какой лучше библиотекой воспользоваться v4 или ActionBarSherlock?

Gorets
Сообщения: 8
Зарегистрирован: 12 янв 2012, 12:38

Re: Урок 114. Android 3. Библиотека Support Library. Зачем н

Сообщение Gorets » 10 дек 2012, 15:41

Конечно, немного обидно, что v4 поддерживает фрагменты, но не поддерживает ActionBar, приятно и логичней было бы, что бы эти элементы были вместе =)

Babajko
Сообщения: 2
Зарегистрирован: 10 дек 2012, 18:07

Re: Урок 114. Android 3. Библиотека Support Library. Зачем н

Сообщение Babajko » 10 дек 2012, 18:11

damager82 писал(а):
AndreyI писал(а):-v4 в конце файла библиотеки jar, есть ни что иное, как квалификатор
Не знал про это, интересно!
-v4 это никакой квалификатор.
здесь просто сказано, что эта библиотека может быть использована начиная з API level 4 и више

Babajko
Сообщения: 2
Зарегистрирован: 10 дек 2012, 18:07

Re: Урок 114. Android 3. Библиотека Support Library. Зачем н

Сообщение Babajko » 10 дек 2012, 18:16

AndreyI писал(а):Кстати, полезно знать, что -v4 в конце файла библиотеки jar, есть ни что иное, как квалификатор
перед тем как писать такое. читайте мат часть
Support Library. Minimum API level supported: 4

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 114. Android 3. Библиотека Support Library. Зачем н

Сообщение Foenix » 10 дек 2012, 21:14

Gorets писал(а):Конечно, немного обидно, что v4 поддерживает фрагменты, но не поддерживает ActionBar, приятно и логичней было бы, что бы эти элементы были вместе =)
объясните, что это значит? что, эти ативити с этими фрагментами не может иметь ActionBar?
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

math64
Сообщения: 235
Зарегистрирован: 16 июл 2012, 07:47

Re: Урок 114. Android 3. Библиотека Support Library. Зачем н

Сообщение math64 » 11 дек 2012, 10:18

Потому, что по мнению Google, ActionBar для старых версий (менше v11) не нужен.
Если приложение должно работать для версий меньше и больше v11, при создании приложения создаются отдельные темы в styles.xml для старых версий и новых (v11 и v14).
Квалификаторы v11 и v14 работают для версии 11 (или соответственно 14) и выше, иначе пришлось бы создавать отдельные styles.xml для всех версий от v11 до v17.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 114. Android 3. Библиотека Support Library. Зачем н

Сообщение Foenix » 05 янв 2013, 22:55

Люди, как вы табы делаете на этих фрагментах? у меня катавасия с классом выходит.

Код: Выделить всё

package ru.aaagroup.orderonline;

import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.Activity;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;

public class CTabListener<T extends Fragment> implements ActionBar.TabListener {
    private Fragment mFragment;
    private final Activity mActivity;
    private final String mTag;
    private final Class<T> mClass;

    /** Constructor used each time a new tab is created.
      * @param activity  The host Activity, used to instantiate the fragment
      * @param tag  The identifier tag for the fragment
      * @param clz  The fragment's Class, used to instantiate the fragment
      */
    public CTabListener(Activity activity, String tag, Class<T> clz) {
        mActivity = activity;
        mTag = tag;
        mClass = clz;
    }

    /* The following are each of the ActionBar.TabListener callbacks */

    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        // Check if the fragment is already initialized
        if (mFragment == null) {
            // If not, instantiate and add it to the activity
            mFragment = Fragment.instantiate(mActivity, mClass.getName());
            ft.add(android.R.id.content, mFragment, mTag);
        } else {
            // If it exists, simply attach it in order to show it
            ft.attach(mFragment);
        }
    }

    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        if (mFragment != null) {
            // Detach the fragment, because another one is being attached
            ft.detach(mFragment);
        }
    }

    public void onTabReselected(Tab tab, FragmentTransaction ft) {
        // User selected the already selected tab. Usually do nothing.
    }

}
Из-за того, что у меня фрагменты из этой библиотеки, то ругается на строчку объявления класса компилятор.

Код: Выделить всё

ActionBar cannot be resolved to a type
Поиск по интернету истины не выявил. А пример взят почти дословно с сайта девелопера.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 114. Android 3. Библиотека Support Library. Зачем н

Сообщение rezak90 » 05 янв 2013, 23:15

на сколько мне известно саппорт либа не поддерживает actionbar, так что даже с её помощью вы не можете использовать actionbar в ниже 3.0 версиях
R.id.team
Политика на форуме запрещена

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 114. Android 3. Библиотека Support Library. Зачем н

Сообщение Foenix » 05 янв 2013, 23:27

Да мне и не надо ниже 4-ки. Просто я делала другие активити с фрагментами (например, разбираемый пример с девелопера где с одной стороны список, а по нажатию с другой стороны высвечивается текст), там вообще не получалось ничего, пока я не указала v4 пакет, я с ним мучилась довольно долго. Теперь я просто везде указываю эту библиотеку совместимости.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 114. Android 3. Библиотека Support Library. Зачем н

Сообщение Foenix » 05 янв 2013, 23:29

Сейчапс поменяла в загловке библиотеки на обычные - та же ошибка, ничего не изменилось.
Блин, как меня уже достало то, что примеры с девелопера, скопированные до буквы не работают. НАфига они тогда все это там пишут..

Теперь пишет ошибку на строке

Код: Выделить всё

 ft.attach(mFragment);
Call requires API level 13 (current min is 11): android.app.FragmentTransaction#attach
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 114. Android 3. Библиотека Support Library. Зачем н

Сообщение rezak90 » 06 янв 2013, 00:27

например, разбираемый пример с девелопера где с одной стороны список, а по нажатию с другой стороны высвечивается текст
это называется master detail
на счёт ошибки
Call requires API level 13 (current min is 11): android.app.FragmentTransaction#attach
он же вам говорит что нужно в 13 апи, а вы пытаетесь в 11
R.id.team
Политика на форуме запрещена

Snakebyte
Сообщения: 20
Зарегистрирован: 20 дек 2012, 08:18

Re: Урок 114. Android 3. Библиотека Support Library. Зачем н

Сообщение Snakebyte » 04 фев 2013, 08:40

А как быть, если в новых API используются другие методы, делающие то же самое?
Например, метод setAlpha(int) depredated начиная с API-16 и рекомендуется использовать setImageAlpha(int), который отсутствует в API-10б с которым я хочу сохранить совместимость.
Пока выставил проекту Target SDK 15, но нет гарантии, что на API-16 работоспособность сохраниться. Как правильнее поступить в таком случае?

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 114. Android 3. Библиотека Support Library. Зачем н

Сообщение rezak90 » 04 фев 2013, 08:52

Код: Выделить всё

if(Build.VERSION.INT_SDK >= Build.VERSION_CODES.JELLY_BEAN)
   //setImageAlpha(int)
else
   //setAlpha(int)
R.id.team
Политика на форуме запрещена

einy
Сообщения: 3
Зарегистрирован: 22 май 2013, 12:09

Re: Урок 114. Android 3. Библиотека Support Library. Зачем н

Сообщение einy » 22 май 2013, 12:19

Здравствуйте!

Помогите мне, пожалуйста - я успешно запускал примеры из всех уроков на своим эмуляторе Android 2.2. Иногда возникала ошибка "R cannot be resolved to a variable", с которй я успешно справлялся одним из методов, описанных на StackOverflow.com (чаще всего помогало "Clean Project" и/или перезагрузка IDE).

Сейчас пробую пример из данного урока с Support Library, все исходники взяты из текста статьи, никаких других ошибок не выдается, только эта - "R cannot be resolved to a variable".

Чего я только не пробовал - и настройки IDE крутил, и на "чистый" Eclipse ставил - бесполезно. Четкое впечатление, что эта ошибка в ее неизгоняемой форме появилась именно в связи с Support Library.

Код .xlm и .java не привожу, т.к. он один в один был скопирован мной из урока.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 114. Android 3. Библиотека Support Library. Зачем н

Сообщение Foenix » 22 май 2013, 12:26

у тебя ошибка в каком-то из файлов xml, вот R и не создается
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

einy
Сообщения: 3
Зарегистрирован: 22 май 2013, 12:09

Re: Урок 114. Android 3. Библиотека Support Library. Зачем н

Сообщение einy » 22 май 2013, 12:49

Все тексты xml-файлов я брал из статьи, один в один! В Graphical Layout они, кстати, отображаются нормально.

Прилагаю скриншоты.
Вложения
screenshots1.zip
(1.04 МБ) 652 скачивания

einy
Сообщения: 3
Зарегистрирован: 22 май 2013, 12:09

Re: Урок 114. Android 3. Библиотека Support Library. Зачем н

Сообщение einy » 22 май 2013, 12:56

Еще интересное наблюдение - я пробовал модифицировать код уроков 104-106 для работы с Support Library (для запуска под эмулятором android v2.2) - тоже ошибки, и только эти же. То есть, проблема либо не в исходниках уроков, либо в исходниках ВСЕХ уроков по android v3?

Ответить