Fragment nicht wieder aufgenommen, nach der Ausrichtung ändern
Die Fragmente in meine app nicht wieder aufgenommen, um die Aktivität anzuzeigen, wenn das Gerät gedreht wird. Wenn ich verstehe, die Dokumentation (und ähnliche Fragen hier auf SO) richtig ist, sollte dieser behandelt werden, werden die fragment-manager (ohne Angabe android:configChanges in meinem manifest).
Meine Aktivität sieht so aus:
public class MainActivity extends SherlockFragmentActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null){
getSupportFragmentManager().beginTransaction()
.add(R.id.main_fragment_placeholder, new DashboardFragment(),"dashboard")
.commit();
}
}
}
Und ein Fragment aussieht (entfällt clicklisteners und so weiter für Klarheit):
public class DashboardFragment extends SherlockFragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.fragment_dashboard, container, false);
}
}
Layout-Dateien Aussehen (activity_main.xml):
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/main.main">
<FrameLayout android:id="@+id/main_fragment_placeholder"
android:layout_height="fill_parent"
android:layout_weight="1"
android:layout_width="0px"
/>
</LinearLayout>
Und fragment_layout.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main.wrapper"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<my.layout.DashboardLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/main.dashboard">
<!-- some buttons here -->
</my.layout.DashboardLayout>
</LinearLayout>
Allerdings, wenn ich drehen mein Gerät den Bildschirm immer leer wird.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Stellt sich heraus, ich habe eine Dumme Sache. Ich überschrieb die
onSaveInstanceState(...)
Methode in meine Tätigkeit, ohne Aufrufsuper.onSaveInstanceState()
, die in Folge der Fragmente nicht neu. Veröffentlichung der Antwort hier in der Hoffnung, dass ich sparen kann, jemand anderem die Zeit!CompositeActivity
als Basisklasse für meine Tätigkeit, und es hat nicht nennensuper.onSaveInstanceState()
imCompositeActivity
Klasse :'( hat mich 2 Stunden, um das herauszufinden...Fragmente in der Regel erhalten neu auf Konfiguration ändern. Wenn Sie nicht möchten, dass dies geschehen ist, verwenden
setRetainInstance(true);
im Fragment Konstruktor(en)Dadurch werden Fragmente beibehalten werden während der Konfiguration ändern.
http://developer.android.com/reference/android/app/Fragment.html#setRetainInstance(boolean)
onCreate()
genannt wird. Stattdessen nur das hinzufügen/ersetzen Sie das fragment, wennsavedInstanceState()
istnull
. Wenn es nichtnull
Sie sind auf dem Rückweg von einer Konfiguration zu ändern, und Sie Ihre vorhandenen Fragmente neu erstellt werden (oder, wenn Sie erhalten bleiben, Sie sind schon da).setRetainInstance(true)
bedeutet, dass das fragment selbst wird beibehalten werden, über änderungen an der Konfiguration, anstatt zerstört/wiederhergestellt, wie die Aktivität ist. Es ist jedoch immer noch aufgerufen werden, mitonCreateView()
.