переключиться на новое действие вместо переключения фрагментов, когда щелкнут элемент списка скользящего меню jfeinstein10

Я видел несколько вопросов, поднятых по этой теме (например: https://github.com/jfeinstein10/SlidingMenu/issues/5), но мне все еще неясно. Я надеюсь, что кто-то может прояснить это.

Контекст:

См. https://github.com/jfeinstein10/SlidingMenu.

У меня есть приложение для Android, которое упорядочивает экраны по действиям и фрагментам (т.е. каждый экран представляет собой действие, содержащее один или несколько фрагментов). Новым требованием является добавление скользящего меню (аналогично тому, что предоставляет эта библиотека).

Проблема:

Из примеров и обсуждения видно, что правильной моделью было бы иметь только 1 ГЛАВНУЮ ДЕЯТЕЛЬНОСТЬ, которая затем будет включать/выключать фрагменты, принадлежащие разным экранам. На самом деле автор упоминает в приведенной выше ветке: «Если бы вы запускали действия на основе выбора списка, то у вас не было бы поведения, при котором вы меняете местами представления, о которых вы говорите», а также «Вы не можете поместите действие в приведенное выше представление. Это не имеет смысла, если вы думаете о том, что такое действие».

Почему это не имеет смысла? Очевидно, здесь я упускаю суть.

Вопрос:

Учитывая, что мой проект уже содержит несколько действий (по одному для каждого экрана), является ли мой единственный вариант реорганизовать проект, чтобы иметь ТОЛЬКО 1 ОСНОВНОЕ ДЕЯТЕЛЬНОСТЬ, чтобы использовать эту библиотеку? Или, в качестве альтернативы, есть ли способ запустить новое действие при нажатии элемента списка в скользящем меню и по-прежнему наблюдать за поведением скользящего меню, [EDIT — добавлена ​​последняя часть, чтобы быть более понятным] или, другими словами, как именно использовать эту библиотеку в моем существующем дизайне приложения.

заранее спасибо


person crazy horse    schedule 13.03.2013    source источник


Ответы (3)


Во-первых, вы не можете иметь Activity внутри другого, а действия полностью отличаются от представлений, как указано в документы:

Активность — это отдельная целенаправленная вещь, которую может делать пользователь.

Теперь, чтобы ответить на ваш вопрос, все зависит от того, как вы хотите, чтобы ваше приложение вело себя. Вы можете использовать свои действия с помощью скользящего меню для реализации onClosedListener и переключаться оттуда на выбранное действие. Это даст вам анимацию закрытия меню перед переключением действий. Это также даст вам странный эффект, поскольку каждый раз, когда вы выбираете что-то в своем меню, вы будете видеть анимацию нового действия, выходящего на передний план.

Я думаю, что лучшим подходом было бы иметь «общую цель» между всеми вашими вариантами скользящего меню. Например, в одном из моих проектов мне нужно разрешить пользователям выбирать между списками различных типов данных. Когда пользователь выбирает что-либо в меню, я загружаю новый фрагмент списка в правый угол, где он может выбрать элемент, который хочет просмотреть или отредактировать. Это точка входа в приложение, а также единственное место, где у меня есть скользящее меню в моем приложении. Это почти то же самое для каждого приложения, которое реализует этот шаблон дизайна пользовательского интерфейса. Посмотрите на google+, currents и youtube, где боковое меню позволяет выбрать, какой канал или контент показывать. Как только пользователь сделает выбор, просто откройте новое действие для выбранного элемента (пост в g+, видео, новостная статья, твит или что-то еще).

Вашему приложению не обязательно иметь списки различных данных или что-то подобное, чтобы использовать скользящее меню, но имейте в виду, что действие со скользящим меню должно иметь четкую, сфокусированную цель в отношении его функциональности и назначения. Наличие скользящего меню, потому что оно есть во многих других приложениях, — плохой выбор, вы должны использовать его с определенной целью. Также имейте в виду, что повсеместное применение скользящего меню может нарушить шаблон навигации платформы. и привести к общему плохому взаимодействию с пользователем, поскольку оно не будет вести себя как другие приложения.

person ebarrenechea    schedule 13.03.2013
comment
Я следую навигации. Шаблон очень похож на приложение YouTube - панель действий, чья «навигация вверх» открывает скользящее меню. Вы упомянули выше - .. просто откройте новую активность для выбранного элемента. В библиотеке скользящего меню показаны примеры переключения «фрагментов» (не действий) при выборе элемента скользящего меню. Когда я попытался переключить «деятельность», я увидел странный эффект появления новой деятельности, как вы упомянули. К сожалению, мой вопрос (отредактированный) выше все еще остается открытым о том, как именно использовать эту библиотеку в моем существующем дизайне приложения. - person crazy horse; 14.03.2013
comment
Я предполагаю, что у вас есть своего рода MainActivity, точка входа вашего приложения, которая служит маршрутизатором для других действий. Просто сделайте так, чтобы это действие превратилось в ваше скользящее меню. Загрузите фрагмент для просмотра каждого типа контента на основе выбранного пункта меню. Вам понадобится только фрагмент просмотра в MainActivity, который всегда будет заменяться. Откройте другое действие для обработки отдельных элементов. Поскольку у вас уже есть работающее приложение, повторное использование существующих действий для просмотра каждого типа контента является лучшим вариантом, чем изменение всего этого для работы с одним действием. - person ebarrenechea; 14.03.2013
comment
может быть немного поздно, но я нашел решение. Я создал класс с моим скользящим меню, а другие действия расширяют этот класс (поэтому все содержат скользящее меню, не вставляя его во все файлы макета). Для странного эффекта нового действия вы можете просто удалить анимацию, используя: намерение.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); - person simas; 02.09.2014

Не имеет смысла размещать действие в приведенном выше представлении, поскольку действие является основным контроллером представления каждого экрана. Активность также показывает представления и отслеживает фрагменты (которые, в свою очередь, являются мини-контроллерами со своими собственными представлениями или без них). Таким образом, размещение действия в приведенном выше представлении будет означать, что вы поместите действие в действие... Что невозможно.

Из того, что я могу извлечь из вашего текста, я думаю, что было бы разумно снова прочитать руководство для разработчиков Android по действиям и фрагментам (http://developer.android.com/guide/components/activities.html), чтобы лучше понять, как работает концепция Android.

Теперь к вашему вопросу:

Я не понимаю, чего вы пытаетесь достичь, но если вы хотите, чтобы ваше приложение с меню вело себя, скажем, как приложение Google+, то один из способов сделать это — реализовать базовый класс, который расширяет класс Activity (или что-то еще). базовая активность, используемая в вашем проекте), и пусть база устанавливает SlidingMenu. Затем вы просто расширите свою базовую активность в каждой из активностей, которые должны иметь меню.

Вы также можете сделать это так, как вы описываете, но тогда вы получите классический пример объекта Бога (http://en.wikipedia.org/wiki/God_object). Это отличный способ попрактиковаться в навыках жонглирования фрагментами, и переключение между фрагментами вместо запуска новых действий действительно имеет свои варианты использования, но я все же не рекомендовал бы его для проекта с более чем несколькими представлениями.

person Qw4z1    schedule 14.03.2013
comment
Я уже пробовал подход, который вы предлагаете выше (1 базовое действие с другими, вытекающими из этого). Я попробую подход, предложенный @ebarrenchea, для переключения фрагментов на основе щелчка пункта меню. Спасибо за ваш совет! - person crazy horse; 14.03.2013

Вот ответ, наиболее близкий к моей проблеме: http://www.verious.com/article/polishing-the-sliding-app-menu/. Прокрутите вниз до конца страницы, чтобы увидеть последний раздел под названием «Использование всплывающего меню приложения между действиями». Это один из вариантов, если у вас много действий в существующем приложении и вы хотите избежать обширного рефакторинга. Я еще не пробовал это, но об этом стоит знать.

person crazy horse    schedule 18.03.2013