方向改变时不加载不同的片段(android)

时间:2012-04-05 16:28:16

标签: android android-fragments orientation-changes

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

# 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,当我在Portrait中打开时,将显示PortraitFragment。到目前为止,非常好。

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

同样的事情恰好相反,如果设备以纵向方向开始,然后我将其旋转为横向:只需重新加载PortraitFragment,而不是加载LandscapeFragment。

我做错了什么?

2 个答案:

答案 0 :(得分:2)

确保您的manifest.xml中没有android:config="orientation"

答案 1 :(得分:1)

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

layoutportrait for layout / main.xml

对于layout-land / main.xml,

fragmentlanscape。 (并改变: Fragment frag = getSupportFragmentManager()。findFragmentById(R.id.fragment);

frag.setRetainInstance(假); )