Чем отличается tag в методах add() и addToBackStack()?
Tag в методе add() присваивается фрагменту. Fragment.getTag() возвращает этот тег.
Тег фрагмента используется в методе findFragmentByTag().
Tag в методе addToBackStack() это на самом деле не tag, а name. Имя транзакции, которое присваивается объекту BackStackEntry и возвращается методом getName().
Этот вопрос возник на собеседованиях, потому что когда только появились фрагменты было популярно писать такой код:
Удобно? Нет! Не надо так делать.
Tag в методе add() присваивается фрагменту. Fragment.getTag() возвращает этот тег.
Тег фрагмента используется в методе findFragmentByTag().
Tag в методе addToBackStack() это на самом деле не tag, а name. Имя транзакции, которое присваивается объекту BackStackEntry и возвращается методом getName().
Этот вопрос возник на собеседованиях, потому что когда только появились фрагменты было популярно писать такой код:
val tag = "home_fragment"Сначала добавляется фрагмент с одинаковым тегом фрагмента и именем транзакции. Потом, используя имя-тег, можно получить инстанс фрагмента по позиции в бэкстэке.
supportFragmentManager.beginTransaction()
.add(R.id.fragmentContainer, HomeFragment, tag)
.addToBackStack(tag)
.commit();
…
val lastEntryIndex = supportFragmentManager.backStackEntryCount - 1
val tag = supportFragmentManager.getBackStackEntryAt(lastEntryIndex).name
val topFragment = supportFragmentManager.findFragmentByTag(tag)
Удобно? Нет! Не надо так делать.
👍7❤1
Метод FragmentManager.commit() – синхронный или нет?
– Асинхронный.
Это значит, что транзакция не выполняется во время вызова метода. commit() добавляет транзакцию в очередь главного потока и транзакция выполняется при первой возможности.
Чтобы выполнить транзакцию синхронно, можно воспользоваться методом commitNow() вместо commit() или вызвать executePendingTransactions() после метода commit().
– Асинхронный.
Это значит, что транзакция не выполняется во время вызова метода. commit() добавляет транзакцию в очередь главного потока и транзакция выполняется при первой возможности.
Чтобы выполнить транзакцию синхронно, можно воспользоваться методом commitNow() вместо commit() или вызвать executePendingTransactions() после метода commit().
👍12
Электронные книги? Аудиокниги? Смешать, но не взбалтывать
Отпуск - замечательное время, которое не занято работой, а значит можно и нужно заняться тем, чем давно хотелось - хобби. Сегодня поговорим об одной из любимых тем - читалка и все, что с ней связано.
Читать статью
Отпуск - замечательное время, которое не занято работой, а значит можно и нужно заняться тем, чем давно хотелось - хобби. Сегодня поговорим об одной из любимых тем - читалка и все, что с ней связано.
Читать статью
Teletype
Электронные книги? Аудиокниги? Смешать, но не взбалтывать
Всем привет!
👍4
Что такое Activity State Loss Exception? Для чего нужен commitAllowingStateLoss()?
Это два вопроса на одну и ту же тему.
Под Activity State Loss Exception понимается исключение вида:
java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState with MyFragment.
Это исключение случается, когда метод FragmentTransaction.commit() вызывается после Activity.onSaveInstanceState(). Его не всегда удается поймать во время тестирования, потому что место вызова onSaveInstanceState() зависит от версии ОС.
В чем же причина исключения?
Когда пользователь уходит с активити, состояние сохраняется на случай, если активити будет уничтожена системой. Сохранение состояния происходит в методе onSaveInstanceState(). Если транзакция применяется после сохранения состояния, то транзакция не может быть сохранена и система бросает исключение.
Метод commitAllowingStateLoss() делает то же, что и метод commit(), но говорит системе, что мы готовы к потере состояния и исключение бросать не нужно. commitAllowingStateLoss() замалчивает, а не решает, проблему. Использование commitAllowingStateLoss() приводит к ситуациям такого вида:
Пользователь возвращается на активити, которая была уничтожена системой. Пользователь ожидает увидеть UI, который отображался перед тем как он покинул активити, но транзакция с добавлением или удалением фрагмента не сохранилась и пользователь видит пустой экран или активити в неверном состоянии.
Хорошей практикой считается использование commit(), а не commitAllowingStateLoss(). Если вы получаете репорты о state loss крэшах, пробуйте решить корень проблемы. Для этого не вызывайте commit() в onPause() или следующих после него методах.
Это два вопроса на одну и ту же тему.
Под Activity State Loss Exception понимается исключение вида:
java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState with MyFragment.
Это исключение случается, когда метод FragmentTransaction.commit() вызывается после Activity.onSaveInstanceState(). Его не всегда удается поймать во время тестирования, потому что место вызова onSaveInstanceState() зависит от версии ОС.
В чем же причина исключения?
Когда пользователь уходит с активити, состояние сохраняется на случай, если активити будет уничтожена системой. Сохранение состояния происходит в методе onSaveInstanceState(). Если транзакция применяется после сохранения состояния, то транзакция не может быть сохранена и система бросает исключение.
Метод commitAllowingStateLoss() делает то же, что и метод commit(), но говорит системе, что мы готовы к потере состояния и исключение бросать не нужно. commitAllowingStateLoss() замалчивает, а не решает, проблему. Использование commitAllowingStateLoss() приводит к ситуациям такого вида:
Пользователь возвращается на активити, которая была уничтожена системой. Пользователь ожидает увидеть UI, который отображался перед тем как он покинул активити, но транзакция с добавлением или удалением фрагмента не сохранилась и пользователь видит пустой экран или активити в неверном состоянии.
Хорошей практикой считается использование commit(), а не commitAllowingStateLoss(). Если вы получаете репорты о state loss крэшах, пробуйте решить корень проблемы. Для этого не вызывайте commit() в onPause() или следующих после него методах.
👍8
Подключение сканера к Android или как почувствовать себя кассиром
Недавно на одном из проектов мне потребовалась поддержка беспроводного сканера и получение с него данных.
Итак, наша основная задача – получить данные со сканера в нашем собственном приложении и как-то их использовать, в этом руководстве мы их просто выведем на экран. В качестве примера возьмём 2D сканер Mertech CL-2210.
Читать статью
Недавно на одном из проектов мне потребовалась поддержка беспроводного сканера и получение с него данных.
Итак, наша основная задача – получить данные со сканера в нашем собственном приложении и как-то их использовать, в этом руководстве мы их просто выведем на экран. В качестве примера возьмём 2D сканер Mertech CL-2210.
Читать статью
Teletype
Подключение сканера к Android или как почувствовать себя кассиром
Привет! На связи Константин, Android разработчик Joy Dev. Недавно на одном из проектов мне потребовалась поддержка беспроводного сканера...
👍8
Отличная идея для пет-проекта;
описание возможностей приложения:
• Инициализация платежа
• Отмена платежа
• Возврат платежа
• Проведение клиринга
• Проведение рекуррентного платежа
• Получение информации/статуса платежа
• Добавление карт/Удаление карт
• Оплата добавленными картами
• Безакцептные платежи
• Создание платежа с Google Pay
@android_dev_ru
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥5❤1
Поиск источника конфликта в Gradle зависимостях проекта, и решение проблемы.
@android_dev_ru #android #gradle
Читать статью
@android_dev_ru #android #gradle
Читать статью
Medium
Debugging dependencies in Gradle
How to use dependencyInsight and fix transient dependencies to specific versions in your Android app
👍4🔥2
Как получить ссылку на фрагмент из активити?
Отвечая на этот вопрос, не рассказывайте, пока не спросят, об использовании в активити объекта List<MyFragment>, в который вы добавляете фрагменты при вызове onAttach() и удаляете в onDetach(). Интервьюер хочет услышать знаете ли вы стандартные методы API.
Системное API предоставляет два метода для поиска и получения фрагмента внутри активити: findFragmentByTag() и findFragmentById().
findFragmentByTag() принимает параметром тег, который передается в методе add() или replace() или в XML в элементе <fragment>. Возвращает null, если фрагмент не найден.
findFragmentById() принимает параметром id фрагмента. Если фрагмент добавляется методом add() или replace(), то id фрагмента – это id контейнера, который передается первым параметром. В случае добавления фрагмента через XML, id задается в элементе <fragment>. findFragmentById() возвращает null, если фрагмент не найден.
#android @android_dev_ru
Отвечая на этот вопрос, не рассказывайте, пока не спросят, об использовании в активити объекта List<MyFragment>, в который вы добавляете фрагменты при вызове onAttach() и удаляете в onDetach(). Интервьюер хочет услышать знаете ли вы стандартные методы API.
Системное API предоставляет два метода для поиска и получения фрагмента внутри активити: findFragmentByTag() и findFragmentById().
findFragmentByTag() принимает параметром тег, который передается в методе add() или replace() или в XML в элементе <fragment>. Возвращает null, если фрагмент не найден.
findFragmentById() принимает параметром id фрагмента. Если фрагмент добавляется методом add() или replace(), то id фрагмента – это id контейнера, который передается первым параметром. В случае добавления фрагмента через XML, id задается в элементе <fragment>. findFragmentById() возвращает null, если фрагмент не найден.
#android @android_dev_ru
👍6🔥2
Приложение с открытым исходным кодом Duress, наспинное на Kotlin, помогает следить за безопасностью вашего устройства.
Оно позволяет установить специальный пароль принуждения, который можно использовать при угрозе безопасности. Если кто-то попытается заставить вас разблокировать телефон, просто введите этот пароль.
После этого Duress автоматически отправит уведомление выбранным контактам, чтобы они знали, что вам нужна помощь.
@android_dev_ru #android
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥3
Топ плагинов для Android Studio
1. Kotlin Fill Class — фантастический плагин, который делает разработку намного более приятной и быстрой. С его помощью вы можете заполнять классы и функции на лету.
2. ADB Idea — это дополнение к ADB, которое вы можете запустить с помощью всплывающего окна.
3. Key Promotex X — поможет вам освоить основные сочетания клавиш во время работы. Когда вы нажимаете мышью на кнопку в среде IDE, Key Promoter X показывает сочетание клавиш, которое вы должны были использовать вместо этого.
4. IdeaVim — это Vim в Android Studio. Вы можете настроить его по своему вкусу с помощью файла .ideavimrc в вашем домашнем каталоге, как если бы вы использовали .vimrc.
@android_dev_ru #android
1. Kotlin Fill Class — фантастический плагин, который делает разработку намного более приятной и быстрой. С его помощью вы можете заполнять классы и функции на лету.
2. ADB Idea — это дополнение к ADB, которое вы можете запустить с помощью всплывающего окна.
3. Key Promotex X — поможет вам освоить основные сочетания клавиш во время работы. Когда вы нажимаете мышью на кнопку в среде IDE, Key Promoter X показывает сочетание клавиш, которое вы должны были использовать вместо этого.
4. IdeaVim — это Vim в Android Studio. Вы можете настроить его по своему вкусу с помощью файла .ideavimrc в вашем домашнем каталоге, как если бы вы использовали .vimrc.
@android_dev_ru #android
👍11🔥1
@android_dev_ru
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🆒4🔥3❤1
Минималистичный интерфейс — простая и удобная навигация
@android_dev_ru
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥3
Интегрируя контролируемую среду и стандартизированные тесты, а также используя набор данных Android Instruct, инструмент повышает производительность мл-моделей и агентов с открытым исходным кодом.
Внутри два режима выполнения: AVD на Mac (arm64) и Docker на Linux (x86_64). Вы можете свободно добавлять или изменять новые задачи или образы для Android приложений в соответствии с нашей платформой. Android Lab содержит полную систему оценки, которая может быть использована для оценки производительности различных агентов Android.
Тест AndroidLab включает в себя готовые виртуальные устройства Android и 138 задач в девяти приложениях, созданных на этих устройствах.
@android_dev_ru
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍2🔥1
@android_dev_ru
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍2🔥2
Приложение разрабатывается одним человеком, но уже попало в подборки лучших open-source решений для Android. Оно работает как на рутированных устройствах, так и через Shizuku, предлагая продвинутый анализ установленных приложений.
@android_dev_ru
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤4🔥2