Size: a a a

Android Developers

2020 June 26

DK

David Khegay in Android Developers
danilshik
Во всем приложении имеется только 1 Activity, которая управляет всеми фрагментами. Вот и все. Из-за использования фрагментов в качестве основы, а не Activity, позволяет строить более гибкие интерфейсы, анимации перехода и т.д
то есть если у меня есть флоу Авторизации, и флоу Основной, у меня будет главная одна активити которая переключаеться между 2 фрагментами AuthFlowFragment и MainFlowFragment? Как то так?

А навигация внутри конкретного флоу уже разруливается в другом месте где то?
источник

DK

David Khegay in Android Developers
Допустим у меня авторизация состоит из 10 экранов, куда пихать логику с переходами между экранами?
источник

d

danilshik in Android Developers
Я бы в каждый из фрагментов делал переход. Создал бы какую - нибудь Extension для Fragment   и вызывал бы.

Либо используйте Navigation Library, там вам нужно будет только у NavController вызвать соответствующий action, который отвечает за переход от конкретного фрагмента к конкретному фрагменту
источник

d

danilshik in Android Developers
+ Использования, это автоматическое название toolbar и стрелка в нем назад, на предыдущий фрагмент
источник

d

danilshik in Android Developers
Но также есть и Cicerone вроде, тоже служит для навигации
источник

OP

Oleg Pchelkin in Android Developers
danilshik
1. Просто очищайте Backstack чтобы перейти на первоначальный экран. Либо используйте Navigation Library.
2. Нет, он еще сырой
По 1 пункту если экран логине не в бэкстеке (а будет странно если он в бэкстеке) - то лучше просто переходить на новый фрагмент с логином, очищая предыдущие данные
источник

d

danilshik in Android Developers
Oleg Pchelkin
По 1 пункту если экран логине не в бэкстеке (а будет странно если он в бэкстеке) - то лучше просто переходить на новый фрагмент с логином, очищая предыдущие данные
Как он может быть не в Backstack, если он первичный экран (ну если только пользователь сам не добавил этот фрагмент в backstack)
источник

DK

David Khegay in Android Developers
danilshik
Я бы в каждый из фрагментов делал переход. Создал бы какую - нибудь Extension для Fragment   и вызывал бы.

Либо используйте Navigation Library, там вам нужно будет только у NavController вызвать соответствующий action, который отвечает за переход от конкретного фрагмента к конкретному фрагменту
Понял про смену логин/не логин, что нужно просто фрагменты поменять, а вот про навигацию внутри  не совсем понял
Не нужно же будет всегда всё прогонять через активити и подставлять новый рут фрагмент?
источник

OP

Oleg Pchelkin in Android Developers
Ну это уже зависит от назначения приложения) Если ы залогинился - приложение должно запомнить тебя и при нажатии на кнопку назад должно просто закрыться приложение в большинстве случаев.
источник

OP

Oleg Pchelkin in Android Developers
David Khegay
Понял про смену логин/не логин, что нужно просто фрагменты поменять, а вот про навигацию внутри  не совсем понял
Не нужно же будет всегда всё прогонять через активити и подставлять новый рут фрагмент?
Если много переходов внутри самого логина - я бы предложил сделать 2 активити с логикой смены фрагментов внутри одной активити. Тем более, если экран логина не нужен при каждом входе.
Вообще есть много либ для навигации, помимо вышеназванных еще conductor есть хорошая либа, она не на фрагменты завязана, а на вью, так что ей можно переходы внутрифрагмента логина и главного фрагмента организовать, если все же возьмешь сингл активити
источник

OP

Oleg Pchelkin in Android Developers
то же и с cicerone.
Navigation Library вроде с фрагментами работает
источник

d

danilshik in Android Developers
Просто попробуйте на 1 activity и 3 тестовых фрагментах оба способа, и выберите понравившийся
источник

DK

David Khegay in Android Developers
понял, всем спасибо!)
источник

WL

WHITE LAMER in Android Developers
Народ привет!
Такой вопрос:
Использую стандартный DatePicker
при нажатии на TextView либо получении фокуса отображаю этот самый DatePicker
для него добавил datePicker.setOnDateChangedListener в котором получаю выбранную дату и вставляю в текстовое поле, после этого (datePicker.visibility = View.INVISIBLE) скрываю календарик
все в принципе хорошо работает НО!
если в календарике начать выбирать год то после выбора года срабатывает DateChangedListener и подставляется дата, скрывается календарик
это логично но не правильно!

как определить пользователь выбрал год или он все-таки кликнул в дату?
источник

VK

Vitalii Krokhalev in Android Developers
WHITE LAMER
Народ привет!
Такой вопрос:
Использую стандартный DatePicker
при нажатии на TextView либо получении фокуса отображаю этот самый DatePicker
для него добавил datePicker.setOnDateChangedListener в котором получаю выбранную дату и вставляю в текстовое поле, после этого (datePicker.visibility = View.INVISIBLE) скрываю календарик
все в принципе хорошо работает НО!
если в календарике начать выбирать год то после выбора года срабатывает DateChangedListener и подставляется дата, скрывается календарик
это логично но не правильно!

как определить пользователь выбрал год или он все-таки кликнул в дату?
Там ведь нужно указать OnDateSetListener
источник

WL

WHITE LAMER in Android Developers
Vitalii Krokhalev
Там ведь нужно указать OnDateSetListener
котлин((( у него datePicker.setOnDateChangedListener { view, year, monthOfYear, dayOfMonth ->
источник

VK

Vitalii Krokhalev in Android Developers
WHITE LAMER
котлин((( у него datePicker.setOnDateChangedListener { view, year, monthOfYear, dayOfMonth ->
Без разницы, Котлин или нет. Что если попробуешь так?
источник

VK

Vitalii Krokhalev in Android Developers
Примерно. Вместо java.util.Calendar - java.time и т.д., что поновее
источник

WL

WHITE LAMER in Android Developers
Vitalii Krokhalev
Без разницы, Котлин или нет. Что если попробуешь так?
тут понятно, используем DatePickerDialog, в нем выбираем и нажимаем "Ок" у него есть set эвент
у меня же просто элемент DatePicker, не хочу пользователя напрягать нажатием лишней кнопки если можно сделать все в одно действие
источник

VK

Vitalii Krokhalev in Android Developers
WHITE LAMER
тут понятно, используем DatePickerDialog, в нем выбираем и нажимаем "Ок" у него есть set эвент
у меня же просто элемент DatePicker, не хочу пользователя напрягать нажатием лишней кнопки если можно сделать все в одно действие
А, DatePicker не в диалоге?
источник