0

您好我正在使用视图寻呼机和片段。我想覆盖方向更改,以便每次方向更改时都不会运行 onCreateView 方法。这是因为我的应用程序在 onCreateView 中运行了很多内容,这导致方向变化缓慢。我的服务器上的东西也被检查了,什么也没有,所以真的没有理由仅仅因为方向改变而让所有的东西都运行。

这是我到目前为止设置的内容

我在清单的 MainActivity 上有这个

 android:configChanges="orientation|keyboardHidden"

然后我在我的片段中使用它

@Override
public void onConfigurationChanged(Configuration newConfig) {
  super.onConfigurationChanged(newConfig);
    getLayoutInflater(getArguments()).inflate(R.layout.main, null, false);
    Toast.makeText(getActivity(), "changed orientation", Toast.LENGTH_LONG).show();
}

当我运行应用程序并切换方向时,我会看到 toast 显示,但布局永远不会更改为横向。所以我决定也许android只是没有认识到它是横向的,因为我覆盖了它,但是将布局更改为一些荒谬的东西,比如对话框的布局不会导致强制关闭或任何它保持纵向布局被拉伸结果,我知道我膨胀布局的方式有问题。

在查看器中更改方向时更改布局的任何帮助将不胜感激。

谢谢!

4

1 回答 1

2

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 膨胀不同的视图,那么每个麦克风片段的标签名称将是MetaMicButtonHumMicButtonLyricsMicButton。我还需要在 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您可以根据屏幕尺寸、语言、停靠模式、夜间模式及其任意组合定义不同的布局.

于 2011-12-28T18:34:08.020 回答