- Эта серия будет посвящена основам разработки Android. Присоединяйтесь ко мне, и давайте попробуем создать и понять несколько интересных вещей. Все ресурсы, которые я использовал для создания этого поста, можно найти в примечании к билету или ЗДЕСЬ .
Версия на YouTube
Приступая к работе
- Прежде чем вы начнете читать дальше, я хочу изложить некоторые определения и важную информацию, которые помогут вам на этом пути
Определения
- В этом сообщении в блоге будет много навигации и навигации, это может привести к путанице. Этот раздел будет служить своего рода приложением к сообщению.
Навигационный график: – это файл ресурсов, содержащий все наши пункты назначения и действия. На этом графике представлены все возможные пути навигации нашего приложения.
NavHost: это очень важный интерфейс и концепция. NavHost действует как пустой контейнер, в котором пункты назначения меняются местами по мере того, как пользователь перемещается по приложению. Вся навигация осуществляется внутри навигационного хоста.
NavHostFragment: это реализация Navhost по умолчанию, которая отвечает за переключение между пунктами назначения. Мы добавим это вручную в XML-файл.
Навигационный контроллер: фактическая навигация осуществляется через навигационный контроллер внутри фрагмента NavHostFragment. Каждый фрагмент NavHostFragment имеет свой собственный навигационный контроллер.
Пункты назначения: навигация в нашем приложении происходит между пунктами назначения, а это означает, что любое место, куда может перемещаться приложение, называется пунктом назначения. Пункты назначения представлены фрагментами.
Действия: логические связи между нашими пунктами назначения, которые представляют пути, которые может выбрать наш пользователь. Мы используем эти действия, чтобы указать нашему приложению правильный маршрут навигации.
Важные вещи, которые нужно знать
Навигационный компонент – это набор доступных нам библиотек и инструментов. Поэтому всякий раз, когда кто-то говорит о навигационном компоненте, он ссылается не на отдельный объект или класс, а на целую коллекцию.
Навигационный компонент предназначен для приложений, которые имеют одно основное действие с несколькими фрагментами. Основное действие связано с навигационным графиком и содержит фрагмент NavHostFragment, который отвечает за смену места назначения по мере необходимости. В приложении с несколькими направлениями деятельности каждое действие должно иметь свой собственный навигационный график.
Транзакции удаляются. Если вы перемещаетесь между экранами на основе фрагментов в рамках одного и того же действия, то в FragmentManager больше нет необходимости. Фрагментные транзакции заменяются предоставлением нашего навигационного графика с действиями, пунктами назначения и навигацией с помощью NavController.
Краткий обзор
- Если мы разберем
Навигационный компонент
до его самого фундаментального уровня, то все, что у нас останется, – это контейнер, который обрабатывает создание экземпляров и навигацию между фрагментами. Так что все, что нам действительно нужно сделать, это предоставить контейнер и подключить провода.
Погружение в
- Учитывая все сказанное, теперь мы можем наконец перейти к какому-то коду. Теперь при создании навигационного компонента мы должны выполнить 5 основных шагов:
- 1) Создайте навигационный график
- 2) Добавьте av-хост к основному виду деятельности
- 3) Добавление пунктов назначения в навигационный график
- 4) Соедините пункты назначения
- 5) Навигация с помощью навигационного контроллера
1) Создайте навигационный график
- Теперь, чтобы создать навигационный график, первое, что нам нужно сделать, это создать папку ресурсов. Щелкните правой кнопкой мыши на каталоге res и выберите
создать -> Файл ресурсов Android
Затем вам будет представлено новое окно. Внутри этого нового окна заполните имя файла тем, что вам нужно, для нас мы выбралиnav_graph
. Вы должны убедиться, что для типа ресурса задано значение навигация, а затем нажать кнопку ок. Если вы заглянете внутрь папкиres
, вы заметите, что есть новый пакет под названиемнавигация
, а внутри этого пакета находится новый файл под названиемnav_graph.xml
. Это файл ресурсов, который будет расширен для представления нашего навигационного графика.
2) Добавьте av-хост к основному виду деятельности
- Краткое напоминание о том, что NavHost действует как контейнер, в котором будут размещаться все навигационные взаимодействия. Так что внутри нашего
main_activity.xml
нам нужно добавить FragmentContainerView. Если вы не знакомы с представлением FragmentContainer, это просто представление, предназначенное для хранения фрагментов. Итак, мы заходим внутрь
main_activity.xml
- Теперь это выглядит как обычный вид контейнера фрагментов, но внимательно посмотрите на последние 3 атрибута:
- Сначала давайте поговорим о
android: имя
, потому что это само по себе является очень важной частью представления контейнера фрагментов. Когда мы устанавливаемandroid: имя
, мы указываем представлению контейнера фрагментов выполнить одноразовую транзакцию, и эта транзакция состоит из 3 вещей:
1): создает новый экземпляр фрагмента 2): вызывает Fragment.on Inflate() для раздувания фрагмента 3): Выполняет транзакцию фрагмента, чтобы добавить Фрагмент в соответствующий менеджер фрагментов
- Поэтому, когда мы устанавливаем атрибут name в значение “android.навигация.фрагмент. NavHostFragment” он будет проходить через 3 утверждения, указанные выше.
- Это гарантирует, что наш фрагмент NavHostFragment перехватит кнопку “Назад в систему”, чтобы мы все еще могли перемещаться по стеку “Назад”.
- Этот атрибут указывает на навигационный график, связанный с этим навигационным узлом. Установка этого свойства раздувает наш файл
nav_graph
и устанавливает свойство графика на фрагменте узла навигации.
3) Добавьте пункты назначения в навигационный график
- Теперь нам нужно перейти к
nav_graph.xml
файл и убедитесь, что вы выбрали вкладку дизайн. Вам будет представлен редактор навигации, этот инструмент позволяет нам визуально редактировать наш навигационный график. Чтобы добавить новый пункт назначения, просто нажмите на значок плюса, и нам будет представлен список всех возможных пунктов назначения. Что на самом деле является просто всеми нашими фрагментами. Вы также можете создать свой собственный пункт назначения, но для нас мы просто выбрали существующий фрагмент.
Как только мы добавили наши пункты назначения, нам нужно определить, какой из наших пунктов назначения должен быть
домашним
пунктом назначения. Нажмите на нужный фрагмент, а затем щелкните значокглавная страница
.
4) Стыковочные пункты назначения
- Когда мы соединяем два пункта назначения, мы делаем это с помощью действий. Мы можем легко создавать действия с помощью редактора графиков, который предоставляется нам через редактор навигации. Редактор графиков – это средняя часть редактора навигации. Поэтому нажмите на пункт назначения “Домой” и перетащите стрелку в другое нужное место назначения.
5) Навигация с помощью навигационного контроллера
public class MainFragment extends Fragment implements View.OnClickListener{ private NavController navController; public MainFragment(){ super(R.layout.main_fragment); } @Override public void onViewCreated(View view, Bundle savedInstanceState){ super.onViewCreated(view,savedInstanceState); this.navController = Navigation.findNavController(view); view.findViewById(R.id.button1).setOnClickListener(this); view.findViewById(R.id.button2).setOnClickListener(this); } @Override public void onClick(View view) { this.navController.navigate(R.id.action_mainFragment_to_fragmentOne);; } }
- Просто для краткого ознакомления, NavController отвечает за управление навигацией приложений внутри NavHost. Чтобы использовать NavController, нам сначала нужно его иметь, и мы делаем это с помощью
Навигации.найти навигационный контроллер(просмотр)
. Класс навигации предоставляет нам полезные методы для поиска навигационного контроллера.найти навигационный контроллер(просмотреть )
- )
найдет навигационный контроллер, связанный с предоставленным представлением.
Теперь, когда у нас есть навигационный контроллер, мы можем перейти к нужному фрагменту с помощью
- Спасибо, что нашли время в свой рабочий день, чтобы прочитать этот мой пост в блоге. Если у вас есть какие-либо вопросы или проблемы, пожалуйста, прокомментируйте ниже или свяжитесь со мной по адресу Твиттер .
Оригинал: “https://dev.to/theplebdev/navigating-android-fragments-with-the-navigation-component-64b”