Tôi đã tạo một thử nghiệm project có hai đoạn khác nhau được hiển thị trong cùng một hoạt động. Một mảnh là dành cho cảnh quan và phần còn lại cho chân dung.Đoạn khác nhau không được tải khi định hướng thay đổi (android)
# 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;
}
}
Và tôi có hai tệp main.xml, một trong sơ đồ bố trí/và tệp kia trong bố cục đất /. Mỗi tệp main.xml trỏ đến đúng Fragment được sử dụng.
<!-- 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" />
Khi tôi mở ứng dụng ở chế độ ngang, LandscapeFragment được hiển thị và khi tôi mở trong Portrait PortraitFragment được hiển thị. Càng xa càng tốt.
Nhưng nếu tôi mở ở chế độ ngang và xoay thiết bị thành dọc thì LandscapeFragment sẽ được tải lại và hiển thị. Đó không phải là hành vi được dự đoán. PortraitFragment đã được tải.
Và điều tương tự cũng xảy ra theo cách khác, nếu thiết bị bắt đầu theo hướng dọc và sau đó xoay nó thành ngang: PortraitFragment vừa được tải lại, thay vì phải tải LandscapeFragment.
Tôi đang làm gì sai?
Không, dòng duy nhất tôi thêm vào manifest mặc định là 'android: screenOrientation = "sensor"' cho hoạt động – Luckcheese
Bạn có cố gắng tạo điểm ngắt trong onCreate() hoạt động của mình để xem liệu phương pháp này có được gọi khi bạn xoay thiết bị không? –
Có. Nó được gọi là. Tôi đã thêm thông điệp tường trình trên onCreate cho hoạt động của tôi và cho từng đoạn. Và khi tôi xoay thiết bị, onCreate của đoạn sai được gọi sau khi hoạt động của onCreate. – Luckcheese