1) 您应该将所有服务器检查例程和其他一次性操作放在 Fragment onCreate() 中,而不是 onCreateView()。如果您需要在加载时显示某种“正在加载...”屏幕,那么我建议使用FragmentActivity来填充至少包含“正在加载...”类型图形的FrameLayout的布局。首先,FragmentActivity 将运行 onCreate(),在其中它会先对初始 View 进行膨胀,然后再实例化 Fragment。将服务器检查代码放在 Fragment 的 onCreate() 中,然后在其 onCreateView() 方法中为该 Fragment 充气任何视图。这是我的一个项目中的一个示例,它初始化了一个麦克风按钮,它实际上是一个片段:
<FrameLayout
android:id="@+id/recorder_mic_fragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
然后,麦克风片段实际上由以下 Java 代码实例化:
// make the Mic button
FragmentManager fragMgr = getFragmentManager();
FragmentTransaction xact = fragMgr.beginTransaction();
if (null == fragMgr.findFragmentByTag(FRAG_TAG)) {
xact.add(R.id.mic_button_frame, MicFragment.newInstance(queryType), FRAG_TAG).commit();
}
FRAG_TAG 实际上是您赋予片段实例的唯一标记名称,该名称不同于片段的 R.id。这样,您可以使用 findFragmentByTag() 来确保片段在您需要它们的所有位置正确实例化。
如果您希望在 Fragments 中加载 Fragments,您可以稍微修改一下此代码,例如我的应用程序的实际工作方式。如果你有一个片段会膨胀几个可能的视图之一,那么使用 if 语句来选择适当的帧 ID 并指定一个唯一的 FRAG_TAG。我建议为您为片段创建的每个 FrameLayout 使用不同的 R.id。(例如,如果这个 Fragment 可能会为 Info、Hum 和 Lyrics 膨胀不同的视图,那么每个麦克风片段的标签名称将是MetaMicButton、HumMicButton和LyricsMicButton。我还需要在 R.id.meta_mic_button_frame 和很快。)
2) 在纵向和横向模式之间切换时,需要在 res/layout 和 res/layout_land 文件夹中定义不同的 XML 布局。(或者,如果您想将横向模式视为默认模式,您可以制作 res/layout 和 res/layout_port)。请查看此链接: http: //developer.android.com/guide/topics/resources/providing-resources.html#AlternativeResources您可以根据屏幕尺寸、语言、停靠模式、夜间模式及其任意组合定义不同的布局.