2011-04-29 1 views
4

Возможно ли показать FragmentDialog, когда вкладка выбрана в ActionBar?Отображение DialogFragment из ActionBar.TabListener

Метод onTabSelected() происходит внутри транзакции, которая совершается после завершения выполнения метода. Однако метод show() в DialogFragment также происходит в транзакции автоматически, поэтому, если вы попытаетесь показать диалог при выборе вкладки, вы получите RuntimeException, потому что транзакция совершается дважды.

Любые подсказки будут оценены.

ответ

3

Просто игнорируйте прилагаемый FragmentTransaction.

Например, вам нужно сделать это, если вы используете библиотеку Android совместимости (ACL), потому что FragmentTransaction вы получаете от панели действий является Android 3,0 FragmentTransaction, а не ACL FragmentTransaction. Таким образом, вы игнорируете переданный и используете свои собственные.

Аналогичным образом, я могу ожидать, что вы можете проигнорировать FragmentTransaction и самостоятельно показать DialogFragment самостоятельно.

Является ли UX какой-либо смысл другой проблемой. Когда пользователь принимает диалог, вкладка показывает ... ничего?

+0

Идея состоит в том, чтобы показать какое-то подменю в верхней части области содержимого (чуть ниже панели действий), когда выбрана вкладка. Это подменю содержит параметры фильтрации, которые будут заменять область содержимого фактическим содержимым при выборе. – mgv

+0

@mgv: :: shrug :: Все еще звучит странно для меня. Подменю кажется прекрасным; с использованием переходного элемента пользовательского интерфейса, такого как диалог, нет. Пользователь отбирает вкладку, выбирает элемент из подменю и ... теперь не может выбрать что-либо еще из подменю, потому что он ушел. Почему бы не использовать навигацию «список» вместо вкладок и отобразить строки в «Spinner», чтобы предложить вашу иерархию меню? – CommonsWare

+0

Это правда, это звучит довольно странно. Меня попросили сделать это таким образом, но я думаю, что буду бороться за свое право на вечеринку и следовать вашим советам. P.S: Игнорирование FragmentTransaction сработало, поэтому ваш ответ был прав. – mgv