Главная » Работа с фрагментами в Android приложении | |
Сегодня мы изучим такую интересную тему, как использование фрагментов для настройки внешнего вида приложения. Фрагменты представляют как бы часть пользовательского интерфейса Activity. Фрагменты можно многократно использовать и как в одном Activity, так и подключать их в различные Activity. Кроме того, их можно подключать и удалять с экрана даже прямо во время работы приложения. Например, если вы зададите некоторые объекты на экране (кнопки, переключатели и т.д.), то во время работы приложения вы не сможете их скрыть, это можно сделать только при редактировании файла layout. Используя же фрагменты, можно с помощью заданных кнопок в любое время добавлять или убирать дополнительные объекты пользовательского интерфейса, определенные вами в фрагментах. Фрагменты имеют тот же жизненный цикл, что и Activity, в которой они используются. Например, если работа Activity остановлена, то она останавливается и для всех вложенных в нее фрагментов. Перейдем от теории к практике. Создаем новый проект, названия по умолчанию, берем Blank Activity. Сначала давайте зайдем в activity_main.xml и добавим следующие элементы:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/b1"
android:text="Кнопка 1"/>
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/b2"
android:text="Кнопка 2"/>
<RadioButton
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/rb"
android:text="Переключатель 1"/>
<ToggleButton
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/tb"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/iv"
android:src="@drawable/ic_launcher"
android:layout_gravity="center"/>
</LinearLayout>
Интерфейс примет вид: Мы настроили внешний вид нашего Activity, как мы это делаем обычно. Но теперь давайте поделим этот вид на отдельные 3 вида. В папке layout приложения создаем файл fragment1.xml и добавим в него только две первых кнопки:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/b1"
android:text="Кнопка 1"/>
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/b2"
android:text="Кнопка 2"/>
</LinearLayout>
Создаем в этой же папке еще один файл fragment2.xml и добавляем в него два переключателя:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RadioButton
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/rb"
android:text="Переключатель 1"/>
<ToggleButton
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/tb"/>
</LinearLayout>
И еще 1 файл fragment3.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/iv"
android:src="@drawable/ic_launcher"
android:layout_gravity="center"/>
</LinearLayout>
Теперь примемся за создание самих фрагментов, они имеют расширение java. В папке, хранящей файл MainActivity.java создаем новый пакет с именем fragments: В этом пакете fragments создаем 3 файла java класса: fragment1, fragment2, fragment3: Теперь возьмемся за редактирование созданных классов фрагментов. Открываем файл fragment1.java. Чтобы наше приложение с фрагментами работало и на более старых версиях ОС Android, добавим в импорт классов фрагментов строку:
import android.support.v4.app.Fragment;
Добавим в файл fragment1.java наследование класса Fragment, вместо метода onCreate в этом случае используют onCreateView, зададим внешний вид класса с созданного раньше layout - файла fragment1.xml:
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import home.study.R;
public class fragment1 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup
container, @Nullable Bundle savedInstanceState) {
//Устанавливаем нашему классу внешний вид с fragment1.xml:
View frag1 = inflater.inflate(R.layout.fragment1,container,false);
return frag1;
}
}
Открываем файл fragment2 и делаем аналогично:
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import home.study.R;
public class fragment2 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, @Nullable
ViewGroup container, @Nullable Bundle savedInstanceState) {
//Устанавливаем нашему классу внешний вид с fragment2.xml:
View frag2 = inflater.inflate(R.layout.fragment2,container,false);
return frag2;
}
}
Ну и класс fragment3:
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import home.study.R;
public class fragment3 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, @Nullable
ViewGroup container, @Nullable Bundle savedInstanceState) {
//Устанавливаем нашему классу внешний вид с fragment3.xml:
View frag3 = inflater.inflate(R.layout.fragment3,container,false);
return frag3;
}
}
Все, фрагменты созданы. Давайте теперь отредактируем файл activity_main.xml, используя созданные фрагменты. Добавляем в activity_main.xml следующий код:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools">
<fragment
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:name="home.study.fragments.fragment1"
tools:layout="@layout/fragment1"/>
<fragment
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:name="home.study.fragments.fragment2"
tools:layout="@layout/fragment2"/>
<fragment
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:name="home.study.fragments.fragment3"
tools:layout="@layout/fragment3"/>
</LinearLayout>
Вот теперь мы создали интерфейс нашему Activity с помощью подключения фрагментов. Как вы видите, внешний вид аналогичен тому, какой был изначально: Но теперь то мы знаем, что, не взирая на внешний вид, элементы на экране входят в 3 различных фрагмента, любой из которых можно при желании отключить, использовать несколько раз (продублировать), использовать на других Activity, не создавая массу однотипных layout файлов для каждого окна программы. Вот и все, надеюсь урок оказался полезным. В дальнейшем мы рассмотрим работу с фрагментами более подробно, в частности управлением фрагментами с помощью кнопок, настройка анимации добавления и удаления фрагментов. | |
|
Всего комментариев: 1 | |
| |