Телефонуйте » (+38) 096 227 41 41

Для того, щоб повторно використовувати компоненти Fragment UI (фрагмент користувальницького інтерфейсу), ви повинні створити кожен з них як абсолютно автономний, модульний компонент, в якому визначені власний макет і поведінка.

Після того, коли будуть визначені ці багаторазові Fragments, ви можете асоціювати їх з Activity і з'єднати з логікою додатку для реалізації загальної складової UI.
Часто буде необхідно, щоб один фрагмент спілкуватися з іншим, наприклад, змінював зміст, заснований на події користувача. Всі комунікації Fragment-до-Fragment робляться через відповідну Activity. Два Fragments ніколи не повинні спілкуватися безпосередньо.

Визначення інтерфейсу

Щоб Fragment мав комунікацію зі своєю Activity, можна визначити інтерфейс в класі Fragment, а його реалізацію в Activity. Activity захоплює реалізацію інтерфейсу під час свого методу onAttach() життєвого циклу , а потім може викликати методи Interface для того, щоб спілкуватися з Activity.
Приклад комунікації Fragment з Activity:

public class HeadlinesFragment extends ListFragment {
    OnHeadlineSelectedListener mCallback;

    // Контейнер Activity повинен реалізувати цей інтерфейс
    public interface OnHeadlineSelectedListener {
        public void onArticleSelected(int position);
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        
        // Тут переконайтеся, що контейнер activity реалізував
        // зворотний виклик інтерфейсу. Якщо ні, то видається виняток
        try {
            mCallback = (OnHeadlineSelectedListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                    + " must implement OnHeadlineSelectedListener");
        }
    }
    
    ...
}

Тепер фрагмент може доставляти повідомлення в activity, викликаючи метод onArticleSelected() (або інші методи в інтерфейсі), використовуючи екземпляр mCallback інтерфейсу OnHeadlineSelectedListener.
Наприклад, наступний метод в фрагменті викликається, коли користувач натискає на елемент списку. Фрагмент використовує інтерфейс зворотного виклику, щоб передати подію в батьківську activity:

    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        // відправка події до приймаючої activity
        mCallback.onArticleSelected(position);
    }

Реалізація інтерфейсу

Для того, щоб отримати зворотні виклики подій від фрагмента, activity, яка є хостом, повинна реалізувати інтерфейс, визначений у класі фрагмента.
Наприклад, наступна activity реалізує інтерфейс з наведеного вище прикладу:

public static class MainActivity extends Activity
        implements HeadlinesFragment.OnHeadlineSelectedListener{
    ...
    
    public void onArticleSelected(int position) {
        // Користувач вибрав заголовок статті з HeadlinesFragment
        // Зробіть що-небудь тут, щоб побачити статтю
    }
}

Доставка повідомлення до фрагменту

Хост-activity може доставляти повідомлення до фрагменту шляхом захоплення екземпляра Fragment за допомогою findFragmentById(), а потім безпосередньо викликати публічні методи фрагмента.
Наприклад, уявіть, що показана вище activity може містити інший фрагмент, який використовується для відображення елемента, зазначеного в даних, які повертаються вище в методі зворотного виклику. У цьому випадку, activity може передавати інформацію, отриману в методі зворотного виклику, до іншого фрагмента, який буде відображати елемент:

public static class MainActivity extends Activity
        implements HeadlinesFragment.OnHeadlineSelectedListener{
    ...

    public void onArticleSelected(int position) {
        // Користувач вибрав заголовок статті з HeadlinesFragment
        // Зробіть що-небудь тут, щоб побачити статтю

        ArticleFragment articleFrag = (ArticleFragment)
            getSupportFragmentManager().findFragmentById(R.id.article_fragment);

        if (articleFrag != null) {
            // Якщо шматок статті доступний, то він в двох панельному макеті...

            // Викликаємо метод в ArticleFragment для оновлення його змісту
            articleFrag.updateArticleView(position);
        } else {
            // Інакше, маємо одно панельний макет і повинні поміняти шматок...

            // Створити фрагмент і дати йому аргумент для обраної статті
            ArticleFragment newFragment = new ArticleFragment();
            Bundle args = new Bundle();
            args.putInt(ArticleFragment.ARG_POSITION, position);
            newFragment.setArguments(args);
        
            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

            // Замінити все у вигляді контейнеру фрагмента з цього фрагмента,
            // і додати транзакцію в задній стек, щоб користувач міг повернутися назад
            transaction.replace(R.id.fragment_container, newFragment);
            transaction.addToBackStack(null);

            // Виконати транзакцію
            transaction.commit();
        }
    }
}

На закынчення, навчальны выдео:




(Джерело: developer.android.com)

Новини

  • Модуль SMARC запускає Android або Linux на Snapdragon 820
    Модуль SMARC запускає Android або Linux на Snapdragon 820

    SMART 2.0 "Snapdragon 820 SOM" iWave має 3 Гб LPDDR4, 32 Гб eMMC, Wi-Fi та Bluetooth, а також вхідні/вихідні виводи, включаючи GbE, HDMI 2.0, MIPI-CSI, USB 3.0 та PCIe. Комп'ютер розміром 82x50 мм працює на ОС Android Snailbone або вище, з наступною підтримкою Linux. Snapdragon 820 об'єднує чотири 14-нм Cortex з технологією FinFET - два на частоті 2,15 ГГц, а два з 1,6 ГГц, які намагаються імітувати високоякісні Cortex-A72. Крім того, SoC оснащений 624 МГц Adreno 530 GPU, Hexagon 680 DSP і 14-розрядним ISP для Spectra. Snapdragon 820 SOM підтримує кодування H.265 4K@60 та кодування 4K@30.

    in Новини

Записатися на курс