Страница 1 из 3

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

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


Click here to read this article!

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

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

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

Добавлено: 27 ноя 2012, 14:44
damager82
AndreyI писал(а):-v4 в конце файла библиотеки jar, есть ни что иное, как квалификатор
Не знал про это, интересно!

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

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

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

Добавлено: 10 дек 2012, 15:41
Gorets
Конечно, немного обидно, что v4 поддерживает фрагменты, но не поддерживает ActionBar, приятно и логичней было бы, что бы эти элементы были вместе =)

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

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

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

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

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

Добавлено: 10 дек 2012, 21:14
Foenix
Gorets писал(а):Конечно, немного обидно, что v4 поддерживает фрагменты, но не поддерживает ActionBar, приятно и логичней было бы, что бы эти элементы были вместе =)
объясните, что это значит? что, эти ативити с этими фрагментами не может иметь ActionBar?

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

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

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

Добавлено: 05 янв 2013, 22:55
Foenix
Люди, как вы табы делаете на этих фрагментах? у меня катавасия с классом выходит.

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

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
Поиск по интернету истины не выявил. А пример взят почти дословно с сайта девелопера.

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

Добавлено: 05 янв 2013, 23:15
rezak90
на сколько мне известно саппорт либа не поддерживает actionbar, так что даже с её помощью вы не можете использовать actionbar в ниже 3.0 версиях

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

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

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

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

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

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

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

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

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

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

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

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

Добавлено: 04 фев 2013, 08:52
rezak90

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

if(Build.VERSION.INT_SDK >= Build.VERSION_CODES.JELLY_BEAN)
   //setImageAlpha(int)
else
   //setAlpha(int)

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

Добавлено: 22 май 2013, 12:19
einy
Здравствуйте!

Помогите мне, пожалуйста - я успешно запускал примеры из всех уроков на своим эмуляторе 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 не привожу, т.к. он один в один был скопирован мной из урока.

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

Добавлено: 22 май 2013, 12:26
Foenix
у тебя ошибка в каком-то из файлов xml, вот R и не создается

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

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

Прилагаю скриншоты.

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

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