Отображение диалогового фрагмента из панели действий.TabListener

#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 сработало, так что ваш ответ был правильным.