Utworzono test project, który zawiera dwa różne fragmenty, które mają być wyświetlane w tym samym działaniu. Jeden fragment jest dla krajobrazu, a drugi dla portretu.Po zmianie orientacji nie został załadowany inny fragment (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;
}
}
Mam dwa pliki main.xml, jeden w układzie/i drugi w układzie-land /. Każdy plik main.xml wskazuje właściwy Fragment, który ma być użyty.
<!-- 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" />
Po uruchomieniu aplikacji w trybie krajobrazowym wyświetlana jest funkcja LandscapeFragment, a po otwarciu w pozycji Portrait pojawia się PortraitFragment. Jak na razie dobrze.
Ale jeśli otworzę krajobraz i obrócę urządzenie do portretu, wówczas funkcja LandscapeFragment zostanie ponownie załadowana i wyświetlona. Co nie jest przewidywanym zachowaniem. Powinien zostać załadowany PortraitFragment.
I to samo dzieje się na odwrót, jeśli urządzenie zaczyna się w orientacji portretowej, a następnie obracam je do krajobrazu: PortraitFragment po prostu zostaje przeładowany, zamiast załadowanego LandscapeFragment.
Co robię źle?
Nie, unikalna linia dodałem do domyślnej manifeście to "android: screenOrientation =" sensor "" dla aktywności – Luckcheese
Czy próbujesz zrobić przerwę w onCreate() swojej aktywności, aby sprawdzić, czy ta metoda jest wywoływana podczas obracania urządzenia? –
Tak. To się nazywa. Dodałem komunikaty logów onCreate dla mojej aktywności i dla każdego fragmentu. I kiedy obracam urządzenie, onCreate niewłaściwego fragmentu jest wywoływany po działaniu onCreate. – Luckcheese