Фрагменты и фильтры намерений - PullRequest
4 голосов
/ 16 ноября 2011

Мы все знаем, как мы можем использовать фильтры намерений в нашем AndroidManifest.xml для объявления возможностей таких действий, как поиск, отправка и т. Д.В настоящее время я использую такой фильтр намерений для регистрации пользовательской схемы URL следующим образом:

<activity android:name="NameOfActivity" >
    <intent-filter >
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWABLE" />
        <data
            android:host=""
            android:scheme="customscheme" />
    </intent-filter>
</activity>

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

Проблема здесь заключается в том, что пока фильтр намеренийзапускает правильную активность на телефоне, эта активность никогда не должна запускаться на планшете.Вместо этого я хотел бы обработать этот URL во фрагменте.На данный момент я не вижу способа исправить это.Одна мысль состояла в том, чтобы добавить фильтр намерений программно, но после некоторого исследования я не могу понять, возможно ли это или нет.Другая мысль заключалась в том, чтобы как-то добавить фильтр намерений к фрагменту, но это не сработало бы, так как фрагмент не может быть запущен без активности, в которой он размещен.Мне нужно одно действие для обработки фильтра намерений, но на планшете мне нужно другое действие для обработки фильтра намерений.

Есть ли способ сделать это?

Ответы [ 3 ]

1 голос
/ 14 декабря 2011

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

1 голос
/ 16 ноября 2011

Разве невозможно, чтобы ваша intent-filter активность определяла разрешение устройства, а затем запускала соответствующее действие для этого?

Кроме того, я думал, что фрагменты были разработаны с учетом вашего случая:описать аспекты пользовательского интерфейса и затем в зависимости от разрешения экрана показать все или некоторые из этих функций.

http://developer.android.com/guide/topics/fundamentals/fragments.html

0 голосов
/ 05 января 2013

Я думаю, что вы подходите ко всей парадигме фрагмента в неправильном направлении.

На телефоне мне нужно одно действие для обработки фильтра намерений, но на планшете мне нужно другое действие для обработки фильтра намерений.

Чтобы перефразировать ваше резюме так, как я бы подошел к ситуации:

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

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

Различные фрагменты могут быть указаны в макете XML (для отдельного действия, с использованием другого файла макета XML в разных папках макета - с помощью определителей размера), поэтому для загрузки другого фрагмента / набора фрагментов на основе Java не требуется на размер устройства.

Трудно продолжить работу, не разбираясь в вашем приложении и в том, почему вы решили (или зачем вам это нужно) проводить отдельные мероприятия.

Если вы хотите продолжить работу с текущим решением, вы можете вручную переопределить backstack, используя режимы запуска .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...