Фрагменти

Fragment е част от Activity, коeто позволява по-модулен дизайн на дейностите. Fragment представлява поведение или част от потребителския интерфейс в даденo Activity. Можем да комбинираме множество фрагменти в едно Activity, за да изградим интерфейс с множество панели и да използваме отново фрагмент в много Activity-та. Жизненият цикъл на фрагмента е пряко засегнат от жизнения цикъл на родителското Activity.

Фрагмент обикновено определя част от потребителския интерфейс. Фрагментите трябва да бъдат вградени в Activity те не могат да работят независимо.

Характеристики

  • Фрагментите включват изгледи и логика, така че да е по-лесно да се използва повторно в Activity.

  • Фрагментите са самостоятелни компоненти, които могат да съдържат изгледи, събития и логика.

  • Приложенията, ориентирана към фрагменти, дейностите стават навигационни контейнери за навигацията към други дейности, представящи фрагменти и предаващи данни.

Употреба на фрагменти:

  • Повторното използване на "View" или "Логика" – Фрагментите позволяват повторното използване на части от екрана, включително изгледи и логика на събитията по различни начини в много различни дейности. Например, използването на един и същ списък в различни източници на данни в дадено приложение.

  • Tablet Support - Фрагментите позволяват специфични да се изграждат версии на телефон, която е различна от версията на таблета.

  • Ориентация на екрана - Често в рамките на приложения, портретната версия на дадена дейност има значително различно оформление от пейзажната версия. Фрагментите позволяват на двете ориентации да използват повторно споделени елементи, като същевременно имат различия.

Качество на кода

В рамките на приложение, което използва фрагменти широко, трябва да имаме предвид, че ролята на дадена Activity се променя.

Activity има навигационна отговорност:

  • Навигация към други Activity.

  • Представяне на навигационни компоненти като чекмеджето за навигация или на устройството за преглед.

  • Скриване и показване на съответните фрагменти с помощта на мениджъра на фрагменти.

  • Получаване на данни от Intent и предаване на данни между фрагменти.

Фрагментите са контролери на съдържание и съдържат повечето изгледи, оформления и логика:

  • Изгледи, показващи подходящо съдържание на приложението.

  • Логика за обработка на събития, свързана със съответните изгледи.

  • Преглед на логиката за управление на състоянието, като например видимост или обработка на грешки.

  • Задействане на мрежова заявка.

  • Извличане и съхранение на данни.

Използване

Дефиниране на фрагмент

Fragment, подобно на Activity, има XML файл за оформление и Java клас, който служи за контрол на фрагмент.

layout->New->Fragment

Класа на fragmenta наследява базовия клас Fragment и овърайдва методите:

  • onCreateView - дефинира изгледа на фрагмента

  • onViewCreated - зарежда визуалните елементи от изгледа в Java обекти

Вграждане на фрагмент

Добавяне на фрагмента динамично в Java става с помощта на класът FragmentTransaction. Класа позволява да се добавят, премахват и заместват фрагменти в оформлението на Activity по време на работа.

В този случай искате да добавите контейнер контейнер "контейнер" (обикновено a ) към вашата дейност, където фрагментът се вмъква по време на изпълнение:FrameLayout

  • в activity_main.xml се добавя FrameLayout

  • в MainActivity.java се добавя:

// Създаване на FragmentTransaction FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); // Запълване на съдържанието на FrameLayout с новия фрагмент ft.replace(R.id.your_placeholder, new FooFragment()); // or ft.add(R.id.your_placeholder, new FooFragment()); // Потвърждаване на замяната ft.commit();

Предаване на данни от Activity кум Fragment

За да се усигори съвместимост между ключовете на данните, който се изпращат от Activity кум Fragment е препоръчително да се създаде клас за създаване на фрагменти с данни

Пример:

    //предаване на данните
    public static CustomFragment newInstance(String name) {
        CustomFragment customFragment = new DemoFragment();
        Bundle args = new Bundle();
        args.putString("user_name", name);
        customFragment.setArguments(args);
        return customFragment;
    }
    //приемане на данните
    String name = getArguments().getString("user_name", "");	

Last updated