Ho creato un test project che ha due diversi frammenti da mostrare nella stessa attività. Un frammento è per il paesaggio e l'altro per il ritratto.Diverso frammento non è stato caricato con orientamento modificato (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;
}
}
E ho due main.xml, uno in layout/e l'altro in layout-land /. Ogni main.xml punta al frammento corretto da utilizzare.
<!-- 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" />
Quando apro l'app sul paesaggio viene mostrato il LandscapeFragment, e quando ho aperto nel Ritratto viene mostrato il PortraitFragment. Fin qui tutto bene.
Ma se apro in orizzontale e ruoto il dispositivo in verticale, LandscapeFragment viene ricaricato e mostrato. Quale non è il comportamento previsto. Il PortraitFragment avrebbe dovuto essere caricato.
E la stessa cosa accade al contrario, se il dispositivo inizia con l'orientamento verticale e quindi lo ruoto in orizzontale: il PortraitFragment viene appena ricaricato, invece di caricare LandscapeFragment.
Cosa sto sbagliando?
No, la linea unica ho aggiunto al manifesto di default è 'android: screenOrientation = "sensore"' per attività – Luckcheese
Cerchi di creare un punto di interruzione in onCreate() dell'attività per vedere se questo metodo viene chiamato quando ruoti il dispositivo? –
Sì. È chiamato. Ho aggiunto i messaggi di log su onCreate per la mia attività e per ciascun frammento. E quando ruoto il dispositivo, onCreate del frammento sbagliato viene chiamato dopo l'attività onCreate. – Luckcheese