6

我创建了一个测试项目,它有两个不同的片段要显示在同一个活动中。一个片段用于横向,另一个用于纵向。

# My unique activity
public class MainActivity extends FragmentActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

# First Fragment
public class LandscapeFragment extends Fragment {
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        TextView v = (TextView) inflater.inflate(R.layout.fragment, container, false);
        v.setText("LANDSCAPE");
        return v;
    }
}

# Other Fragment
public class PortraitFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        TextView v = (TextView) inflater.inflate(R.layout.fragment, container, false);
        v.setText("PORTRAIT");
        return v;
    }
}

我有两个 main.xml,一个在 layout/ 中,另一个在 layout-land/ 中。每个 main.xml 都指向要使用的正确片段。

<!-- layout-land/main.xml  -->
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fragment"
    android:name="br.luckcheese.test.LandscapeFragment"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="5dp" />

<!-- layout/main.xml  -->
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fragment"
    android:name="br.luckcheese.test.PortraitFragment"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="5dp" />

<!-- layout/fragment.xml  -->
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textSize="30sp" />

当我以横向打开应用程序时,会显示 LandscapeFragment,当我以纵向打开应用程序时,会显示 PortraitFragment。到目前为止,一切都很好。

但是,如果我以横向打开并将设备旋转到纵向,则 LandscapeFragment 将重新加载并显示。这不是预测的行为。PortraitFragment 应该已加载。

同样的事情反过来也会发生,如果设备从纵向开始,然后我将其旋转到横向:PortraitFragment 只是重新加载,而不是加载 LandscapeFragment。

我究竟做错了什么?

4

2 回答 2

2

确保你没有:android:config="orientation"在你的 manifest.xml

于 2012-04-06T15:21:00.117 回答
1

问题出在您的 2 个布局中,片段 ID 相同。只需更改这些片段 ID,例如:

布局/main.xml 的片段肖像

用于 layout-land/main.xml 的 fragmentlanscape。(并且还要更改: Fragment frag = getSupportFragmentManager().findFragmentById(R.id.fragment);

frag.setRetainInstance(false); )

于 2012-04-11T07:37:40.467 回答