#android #android-3.0-honeycomb #android-fragments
#Android #android-3.0-honeycomb #android-фрагменты
Вопрос:
Возможно ли отображать FragmentDialog
, когда вкладка выбрана в ActionBar
?
onTabSelected()
Метод выполняется внутри транзакции, которая фиксируется после завершения выполнения метода. Однако show()
метод в DialogFragment
также выполняется в транзакции автоматически, поэтому, если вы попытаетесь отобразить диалоговое окно при выборе вкладки, вы получите RuntimeException
, потому что транзакция выполняется дважды.
Любые подсказки будут оценены.
Ответ №1:
Просто игнорируйте предоставленный FragmentTransaction
.
Например, вам нужно сделать это, если вы используете библиотеку совместимости с Android (ACL), потому что FragmentTransaction
вы получаете из панели действий Android 3.0 FragmentTransaction
, а не ACL FragmentTransaction
. Итак, вы игнорируете переданный и используете свой собственный.
Аналогично, я ожидал бы, что вы можете игнорировать FragmentTransaction
и отображать DialogFragment
самостоятельно без проблем.
Будет ли UX иметь какой-либо смысл — это еще одна проблема. Когда пользователь принимает диалоговое окно, вкладка не показывает … ничего?
Комментарии:
1. Идея состоит в том, чтобы показывать какое-то подменю в верхней части области содержимого (чуть ниже панели действий) при выборе вкладки. Это подменю содержит параметры фильтрации, которые при выборе заменят область содержимого фактическим содержимым.
2. @mgv: :: пожатие плечами:: Для меня все еще звучит странно. Подменю выглядит нормально; использование временного элемента пользовательского интерфейса, такого как диалоговое окно, — нет. Пользователь нажимает на вкладку, выбирает элемент из подменю и… теперь не могу выбрать что-либо еще из подменю, потому что оно исчезло. Почему бы не использовать навигацию «список» вместо вкладок и не отобразить строки в
Spinner
, чтобы предложить иерархию меню?3. Это правда, это звучит довольно странно. Меня попросили сделать это таким образом, но я думаю, что буду бороться за свое право веселиться и последую вашему совету. P.S: Игнорирование FragmentTransaction сработало, так что ваш ответ был правильным.