我的应用只使用一个Activity来承载多个Fragment,也就是说手机上显示的每个屏幕视图(页面)都是一个Fragment。我唯一的活动的布局如下所示:
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>
<FrameLayout
android:id="@+id/fragment_placeholder"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_horizontal|center_vertical"
/>
</merge>
如上所示,<FrameLayout>
是片段占位符。因此,第一个片段通过以下方式添加到占位符:
fragmentTransaction.add(R.id.fragment_placeholder, FirstFragment, TAG1);
下一个片段通过替换现有片段来显示:
fragmentTransaction.replace(R.id.fragment_placeholder, AnotherFragment, TAG2);
一切正常。
现在,我想向我的应用程序添加一项新功能,即读取 NFC 标签数据并在片段 ( NfcFragment ) 上显示数据。
我遵循了 Android Developers NFC 指南并已成功配置我的应用程序以读取 NFC 数据。我的AndroidManifest.xml:
<uses-permission android:name="android.permission.NFC" />
<uses-feature android:name="android.hardware.nfc" android:required="true" />
<application
…>
<activity
android:name="com.nfc.MainActivity"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.nfc.action.TECH_DISCOVERED"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<meta-data android:name="android.nfc.action.TECH_DISCOVERED"
android:resource="@xml/techs" />
</activity>
</application>
现在,当手机靠近 NFC 标签时,我的应用程序会自动启动。但我需要的是,用户手动导航到NfcFragment。在NfcFragment上有一个ToggleButton
指示 NFC 阅读器功能ON或OFF的标志。只有当用户选择了ON时,如果 NFC 标签靠近手机,数据会被读取并显示在NfcFragment上。否则,什么都不会发生。
如何实现这个功能?是否可以使用我当前托管多个片段的一个活动的架构来实现此功能?