片段和意图过滤器

5
我们都知道在AndroidManifest.xml中可以使用intent-filters声明活动的各种能力,例如搜索、推送等。我目前使用此类intent-filter以以下方式注册自定义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>

这一切都很顺利,直到我决定将所有活动转换为片段,因为我需要在表格上以不同的方式显示用户界面。现在,在被声明为大型或更大的设备上,我只有一个活动,根据需要删除和添加新的片段,而不是在不同的活动之间切换。作出了这个选择,因为屏幕左侧始终显示相同的内容,所以我改变片段而不是向所有活动添加此内容。
问题在于虽然intent-filter在手机上启动正确的活动,但这个活动不应该在平板电脑上启动。相反,我希望在片段中处理此URL。目前,我看不出修复这个问题的办法。一个想法是通过编程方式添加intent-filter,但经过一些研究,我无法确定是否可以实现。另一个想法是以某种方式在片段上添加intent-filter,但这不起作用,因为片段不能在没有托管它的活动的情况下启动。
简而言之,在手机上,我需要一个活动来处理intent-filter,但在平板电脑上,我需要另一个活动来处理intent-filter。
有没有办法实现这一点?

好的解决方案:https://dev59.com/ymYs5IYBdhLWcg3wBvVp#13202806 - alcsan
3个回答

1
一个月过去了,我仍然没有找到解决这个问题的方法。目前为止,活动在所有其他内容的顶部启动。它破坏了整个流程,是一个相当糟糕的解决方案,但至少它可以工作。排除这个功能是不可行的,因此这是唯一的解决方案。我会很高兴看到更好的解决方案,但目前似乎简单地不可能。

1

我看不出这会如何解决我的问题。在应用程序在手机上运行时,它可以工作,因为正确的活动已经启动。但是在平板电脑上,活动如何将片段推送到其他活动中呢?它没有对其的引用,并且重新启动另一个活动不是一种选择,因为那会使我的系统无用。 - Bendik

0

我认为你对整个Fragment范例的理解方向有误。

在手机上,我需要一个活动来处理意图过滤器,但在平板电脑上,我需要另一个活动来处理意图过滤器。

用我自己的方式重新表述你的总结:

在手机上,我需要活动根据设备屏幕大小加载特定的片段。在这里,手机上加载的片段将具有一些机制来启动包含更多信息的另一个活动。

在平板电脑上,我需要活动加载两个片段。在这里,左侧片段始终显示相同的内容,右侧加载的片段会随着某种机制而改变以交换片段。

不同的片段可以在布局XML中指定(对于单个活动,使用不同的XML布局文件在不同的布局文件夹中 - 使用大小限定符),因此无需Java即可根据设备大小加载不同的片段/一组片段。

如果不了解您的应用程序以及为什么选择(或为什么需要)拥有单独的活动,则很难进一步阐述。

如果您想继续使用当前的解决方案,您可以通过使用启动模式手动覆盖后退栈。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接