Что делает фрагмент этой программы

Немного о Fragment

Добрый день Хабр, в этой статье я хочу рассказать о таком интересном элементе как Fragment, эта статья не научный прорыв, а просто небольшой туториал о использовании этого элемента. Всем, кому интересно узнать, что-то новое, прошу под кат.

Fragment — модульная часть activity, у которой свой жизненный цикл и свои обработчики различных событий. Android добавил фрагменты с API 11, для того, чтобы разработчики могли разрабатывать более гибкие пользовательские интерфейсы на больших экранах, таких как экраны планшетов. Через некоторое время была написана библиотека, которая добавляет поддержку фрагментов в более старые версии.

  • С помощью них можно легко сделать дизайн адаптивный под планшеты
  • Разделение кода на функциональные модули, а следовательно поддержка кода обходится дешевле

Основные классы

Есть три основных класса:
android.app.Fragment — от него, собственно говоря. и будут наследоваться наши фрагменты

Прогнозирование и оценка эффективности промо


android.app.FragmentManager — с помощью экземпляра этого класса происходит все взаимодействие между фрагментами
android.app.FragmentTransaction — ну и этот класс, как понятно по названию, нужен для совершения транзакций.
В настоящее время появляются разновидности класса Fragment, для решения определенных задач — ListFragment, PreferenceFragment и др.

Основы работы с fragment’ами

Чтобы создать фрагмент все что нужно это наследовать свой класс от Fragment. Чтобы привязать фрагмент к определенной разметке нужно определить в нем метод onCreateView(). Этот метод возвращает View, которому и принадлежит ваш фрагмент.

Чтобы получить это View из любого места фрагмента достаточно вызвать getView()

Фрагмент мы создали, но хотелось бы поместить его на экран. Для этого нам нужно получить экземпляр FragmentManager и совершить нужную нам транзакцию.
Сначала нужно узнать что мы с фрагментом можем сделать:
add() — добавление фрагмента
remove() — удаление фрагмента
replace() — замена фрагмента
hide() — делает фрагмент невидимым
show() — отображает фрагмент

Так же для того чтобы добавлять наши транзакции в стек, как это происходит по умолчанию с активностями, можно использовать addToBackStack(String), а чтобы вернуть предыдущее состояние стэка нужно вызвать метод popBackStack().

Добавим фрагмент на экран:

ExampleFragment youFragment = new ExampleFragment(); FragmentManager fragmentManager = getFragmentManager() fragmentManager.beginTransaction() // получаем экземпляр FragmentTransaction .add(R.id.container_for_fragments, youFragment) .addToBackStack(«myStack») .commit(); // вызываем commit для совершения действий FragmentTransaction

Как связать activity и fragment?

Чтобы вызывать методы активити, достаточно получить его экземпляр через метод getActivity()

if (getActivity() != null) MainActivity act = (MainActivity ) getActivity();

Для того же чтобы получить доступ к фрагменту, у нас есть ссылка на объект фрагмента, которую мы создали при совершении транзакции

Проект «Следы невиданных зверей». Фрагмент программы «Педсовет» ТВ «Угреша» от 18.03.2019

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

  • сериализовать объект
  • передать объект в контейнере Parcel, переопределив методы Parcable
  • кое-где видел, что для создания фрагмента через переопределенный конструктор, создают статический фабричный метод
Читайте также:
Книги что это за программа и нужна ли она

Покажу как это делается для второго варианта, так как для android более правильно использовать Parcel для передачи параметров между активностями и фрагментами.

public class MyObject implements Parcelable < public String paramOne; public int paramToo; public MyObject(String paramOne, int paramToo) < this.paramOne = paramOne; this.paramToo = paramToo; >private MyObject(Parcel parcel) < // Создание объекта через Parcel paramOne = parcel.readString(); paramToo = parcel.readInt(); >public int describeContents() < return 0; >public void writeToParcel(Parcel parcel, int flags) < //Упаковывание объекта в Parcel parcel.writeString(paramOne); parcel.writeInt(paramToo); >public static final Parcelable.Creator CREATOR = new Parcelable.Creator() < // Статический метод с помощью которого создаем обьект public MyObject createFromParcel(Parcel in) < return new MyObject(in); >public MyObject[] newArray(int size) < return new MyObject[size]; >>; >

Здесь мы реализовали интерфейс Parcelable в классе, который хотим передавать между фрагментами.
Чтобы передать его во фрагмент нужно сделать следующее:

MyObject obj = new MyObject(«Строка», 1 ); Bundle bundle = new Bundle(); bundle.putParcelable(«key», obj); youFragment.setArguments(bundle);

Дальше нужно всего лишь получить переданный нами объект в методе onCreateView() нового фрагмента:

UPD. исправил получение объекта obj из getArguments(), спасибо firexel

Анимация фрагментов

Мы научились создавать фрагменты, совершать действия над ними, взаимодействовать с активити и из активити, но чтобы все это выглядело представительно, фрагменты можно немного оживить, добавив к ним анимации.

Чтобы создать свою анимацию добавления и удаления фрагмента? нужно создать два файла в директории res/animator, один из них будет служить для анимации добавления, второй для удаления

Приведу пример одного из них:

//длительность анимации

Корневым элементом служит objectAnimator, его атрибуты и задают параметры анимации.
Теперь нам нужно вызвать метод setCustomAnimations() с нашими анимациями и при следующей транзакции наши фрагменты оживут.

ExampleFragment youFragment = new ExampleFragment(); FragmentManager fragmentManager = getFragmentManager() fragmentManager.beginTransaction() .setCustomAnimations(R.animator.show_fr, R.animator.remove_fr); .add(R.id.container_for_fragments, youFragment) .addToBackStack(«myStack») .commit();

Много еще можно говорить о фрагментах, хотя большая часть всего уже написана, я же хотел объединить все основные знания о фрагментах, чтобы человек, ничего не знающий о этом элементе, после прочтения стал свободно ими пользоваться.

  • android
  • android development
  • для чайников
  • Разработка мобильных приложений
  • Разработка под Android

Источник: habr.com

Что выполняет фрагмент программы

Объяснить, какие действия выполняет данный фрагмент программы
Объяснить, какие действия выполняет данный фрагмент программы. Если есть ошибки, исправить их и.

Дан фрагмент программы. Определить, что будет выдано на печать в результате работы программы
Дан фрагмент программы. Определить, что будет выдано на печать в результате работы программы.

Что выполняет эта часть программы?
Задача: Изменить порядок символов в строке S1 на обратный не используя других строк. Код.

Источник: www.cyberforum.ru

Что делает фрагмент этой программы

Пусть вначале n = 1234. А чему будет равно n после выполнения операции?

2) а как ты объясняешь эту операцию?

k := k + 1;

Пусть вначале k = 3. А чему будет равно k после выполнения операции?
Вполне возможно, что ответы на мои вопросы можно найти в Сети.
PS: Возможно, что у тебя больше знаний по Бэйсику. Тогда найди операции, соответствующие приведённым, в коде на Бэйсик.

Читайте также:
Что за программа quickset64

Последний раз редактировалось ViktorR; 06.07.2019 в 16:13 .
Регистрация: 25.08.2011
Сообщений: 2,837
Вычисление числа по модулю 10
Регистрация: 09.01.2008
Сообщений: 26,245

Вычисление числа по модулю 10

нет. проще.
считает сколько цифр в числе N (определяет значность числа N).

кстати, код не безупречен: для числа 0 ответом будет 0, что, на мой взгляд, является ошибочным.

Регистрация: 04.02.2011
Сообщений: 4,261
Последний раз редактировалось digitalis; 07.07.2019 в 10:50 . Причина: злостный оффтоп
Форумчанин
Регистрация: 09.05.2017
Сообщений: 641
Пусть вначале n = 1234.

А чему будет равно n после выполнения операции?
Форумчанин
Регистрация: 09.05.2017
Сообщений: 641
Пусть вначале k = 3. А чему будет равно k после выполнения операции?

Регистрация: 23.10.2010
Сообщений: 2,148

Какие же вы все умные .
Это ЕГЭшного уровня задача, а школьник не желает напрягать своё серое вещество.
А жаль .

Регистрация: 25.08.2011
Сообщений: 2,837

кстати, код не безупречен: для числа 0 ответом будет 0, что, на мой взгляд, является ошибочным.
Потому что код вычисляет число по модулю. 0 mod 10 = 0
Регистрация: 09.01.2008
Сообщений: 26,245
Потому что код вычисляет число по модулю. 0 mod 10 = 0

при чем здесь модуль числа?
Вы переменную K видите? Вот она и вычисляется.

Какие же вы все умные .
Это ЕГЭшного уровня задача, а школьник не желает напрягать своё серое вещество.
А жаль .

Полностью согласен.

Источник: www.programmersforum.ru

Фрагменты

Организация приложения на основе нескольких activity не всегда может быть оптимальной. Мир ОС Android довольно сильно фрагментирован и состоит из многих устройств. И если для мобильных аппаратов с небольшими экранами взаимодействие между разными activity выглядит довольно неплохо, то на больших экранах — планшетах, телевизорах окна activity смотрелись бы не очень в силу большого размера экрана. Собственно поэтому и появилась концепция фрагментов.

Фрагмент представляет кусочек визуального интерфейса приложения, который может использоваться повторно и многократно. У фрагмента может быть собственный файл layout, у фрагментов есть свой собственный жизненный цикл. Фрагмент существует в контексте activity и имеет свой жизненный цикл, вне activity обособлено он существовать не может. Каждая activity может иметь несколько фрагментов.

Фрагменты в Android

Для начала работы с фрагментами создадим новый проект с пустой MainActivity. И вначале создадим первый фрагмент. Но сразу стоит отметить, что не вся функциональность фрагментов по умолчанию может быть доступна в проекте, поскольку располагается в отдельной библиотеке — AndroidX Fragment library . И вначале необходимо подключить к проекту эту библиотеку в файле build.gradle .

Подключение фрагментов и AndroidX Fragment library в Android и Java

Найдем в нем секцию dependencies , которая выглядит по умолчанию примерно так:

dependencies

В ее начало добавим строку

implementation «androidx.fragment:fragment:1.3.6»

То есть в моем случае получится

dependencies

Подключение фрагментов и AndroidX Fragment library в Android и Java и Gradle

И затем нажмем на появившуюся ссылку Sync Now .

Фактически фрагмент — это обычный класс Java, который наследуется от класса Fragment . Однако как и класс Activity, фрагмент может использовать xml-файлы layout для определения графического интерфейса. И таким образом, мы можем добавить по отдельности класс Java, который представляет фрагмент, и файл xml для хранения в нем разметки интерфейса, который будет использовать фрагмент.

Читайте также:
Compress программа что это

Итак, добавим в папку res/layout новый файл fragment_content.xml и определим в нем следующий код:

Фрагменты содержат те же элементы управления, что и activity. В частности, здесь определены кнопка и текстовое поле, которые будут составлять интерфейс фрагмента.

package com.example.fragmentapp; import androidx.fragment.app.Fragment; public class ContentFragment extends Fragment < public ContentFragment()< super(R.layout.fragment_content); >>

Класс фрагмента должен наследоваться от класса Fragment .

Чтобы указать, что фрагмент будет использовать определенный xml-файл layout, идентификатор ресурса layout передается в вызов конструктора родительского класса (то есть класса Fragment).

Весь проект будет выглядеть следующим образом:

Фрагменты в Android Studio и Java

Добавление фрагмента в Activity

Для использования фрагмента добавим его в MainActivity . Для этого изменим файл activity_main.xml , которая определяет интерфейс для MainActivity:

Для добавления фрамента применяется элемент FragmentContainerView . По сути FragmentContainerView представляет объект View, который расширяет класс FrameLayout и предназначен специально для работы с фрагментами. Собственно кроме фрагментов он больше ничего содержать не может.

Его атрибут android:name указывает на имя класса фрагмента, который будет использоваться. В моем случае полное имя класса фрагмента с учетов пакета com.example.fragmentapp.ContentFragment .

Код класса MainActivity остается тем же, что и при создании проекта:

Если мы запустим приложение, то мы увидим фактически тот же самый интерфейс, который мы могли бы сделать и через activity, только в данном случае интерфейс будет определен во фрагменте:

Создание фрагмента для Android и Java

Стоит отметить, что Android Studio представляет готовый шаблон для добавления фрагмента. Собственно воспользуемся этим способом.

Для этого нажмем на папку, где находится класс MainActivity , правой кнопкой мыши и в появившемся меню выберем New -> Fragment -> Fragment(Blank) :

Добавление фрагмента в Android Studio

Данный шаблон предложить указать класс фрагмента и название файла связанного с ним класса разметки интерфейса.

Добавление фрагмента в Android Studio и Java

Добавление логики к фрагменту

Фрагмент определяет кнопку. Теперь добавим к этой кнопки некоторое действие. Для этого изменим класс ContentFragment:

Здесь переопределен метод onViewCreated класса Fragment, который вызывается после создания объекта View для визуального интерфейса, который представляет данный фрагмент. Созданный объект View передается в качестве первого параметра. И далее мы можем получить конкретные элементы управления в рамках этого объекта View, в частности, TextView и Button, и выполнить с ними некоторые действия. В данном случае в обработчике нажатия кнопки в текстовом поле выводится текущая дата.

Добавление фрагмента в AndroidX Fragment Library и Java

Добавление фрагмента в коде

Кроме определения фрагмента в xaml-файле интерфейса мы можем добавить его динамически в activity.

Для этого изменим файл activity_main.xml :

И также изменим класс MainActivity :

Метод getSupportFragmentManager() возвращает объект FragmentManager , который управляет фрагментами.

Объект FragmentManager с помощью метода beginTransaction() создает объект FragmentTransaction .

FragmentTransaction выполняет два метода: add() и commit(). Метод add() добавляет фрагмент: add(R.id.fragment_container_view, new ContentFragment()) — первым аргументом передается ресурс разметки, в который надо добавить фрагмент (это определенный в activity_main.xml элемент androidx.fragment.app.FragmentContainerView ). И метод commit() подтвержает и завершает операцию добавления.

Итоговый результат такого добавления фрагмента будет тем же, что и при явном определении фрагмента через элемент FragmentContainerView в разметке интерфейса.

Источник: metanit.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru