【问题标题】:Fragments and intent filters片段和意图过滤器
【发布时间】:2011-11-16 15:15:16
【问题描述】:

我们都知道如何在 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 或更大的设备上,我没有在活动之间切换,而是有一个活动可以根据要求删除和添加新片段。这个选择是因为屏幕的左侧总是显示相同的内容,所以我没有将这个内容添加到所有活动中,而是更改了片段。

这里的问题是,虽然意图过滤器在手机上启动了正确的 Activity,但绝不应该在平板电脑上启动此 Activity。相反,我想在片段中处理这个 URL。截至目前,我认为没有办法解决这个问题。一种想法是以编程方式添加意图过滤器,但经过一些研究,我无法确定这是否可能。另一个想法是以某种方式在片段上添加意图过滤器,但这不会起作用,因为片段无法在没有托管它的活动的情况下启动。

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

有没有办法做到这一点?

【问题讨论】:

标签: android android-manifest android-intent


【解决方案1】:

难道不能让您的intent-filter 活动确定设备的分辨率,然后为此启动适当的活动吗?

另外,我认为 Fragments 的设计考虑了您的情况:描述用户界面的各个方面,然后根据屏幕分辨率显示全部或部分功能。

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

【讨论】:

  • 我看不出这将如何解决我的问题。它适用于应用程序在手机上运行的情况,因为已经启动了正确的活动。但是在平板电脑上,活动如何将片段推送到另一个活动中?它没有对它的引用,并且重新启动其他活动不是替代方法,因为这会使我的系统无用。
【解决方案2】:

一个月后,我还没有找到解决方案。据了解,该活动是在其他一切之上启动的。它破坏了整个流程,并且是一个非常糟糕的解决方法,但至少它有效。排除该功能是不行的,因此这是唯一的解决方案。我很高兴看到对此有更好的解决方案,但据了解,这似乎根本不可能。

【讨论】:

    【解决方案3】:

    我认为您正在以错误的方向接近整个 Fragment 范式。

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

    以我处理这种情况的方式重新表述您的摘要:

    在手机上,我需要 Activity 来加载特定的片段,基于 在设备屏幕尺寸上。在这里,手机上加载的片段将具有某种机制来启动另一个包含更多信息的活动。

    在平板电脑上,我需要 Activity 来加载两个片段。在这里,左边的 Fragment 总是会显示相同的内容,而加载的右边 Fragment 会随着某种机制而改变以交换 Fragment。

    可以在布局 XML 中指定不同的片段(对于单个活动,在不同的布局文件夹中使用不同的 XML 布局文件 - 使用大小限定符),因此不需要 Java 来加载基于不同的片段/片段集关于设备尺寸。

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

    如果您想继续当前的解决方案,可以使用launch modes 手动覆盖后台堆栈。

    【讨论】:

      猜你喜欢
      • 2013-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多