Struktur
(Namen der Activies / Fragmente geändert)
Basierend auf einigen Tipps, die in Android Programming: The Big Nerd Ranch Guide geschrieben wurden, habe ich folgende Struktur:
MyListFragment extends ListFragment
MyListActivity extends SimpleFragmentActivity
SimpleFragmentActivity extends ActionBarActivity
MyListActivity.java
%Vor%SingleFragmentActivity.java
%Vor%Nachdem ich die grundlegenden Funktionen meiner App (einschließlich Contextual Action Bar, Navigation, ...) umrissen und programmiert habe, wollte ich sicherstellen, dass die App ohne großen zusätzlichen Aufwand so abwärtskompatibel wie möglich ist. Daher habe ich begonnen, die AppCompat (com.android.support:appcompat-v7:20+) ActionBar zu verwenden.
Was mich am Anfang verblüffte, war, dass ich - im Gegensatz zu allen Tutorials oder den Entwicklerrichtlinien von Android, die ich gelesen habe - die Methode getSupportActionBar in Android Studio noch nie verfügbar hatte (ich verwende Android Studio v0.8.2 und JRE 1.7_60). Immer, wenn ich getActivity().getSup
eintippe, sind die einzigen Vorschläge, die ich bekomme, getSupportFragmentManager
und getSupportLoaderManager
.
Als Workaround erstelle ich eine Membervariable ActionBar mActionBar
in MyListFragment
und initialisiere sie:
Das scheint entweder bei Android 4.4.4 (Moto G) und 2.3.4 (LG E-510) zu funktionieren - den einzigen Geräten, die ich zur Verfügung habe.
Wie dem auch sei, bei der Rotation geht die ActionBar-Zuweisung verloren und die Anwendung stürzt mit einer NullPointerException ab. Debuggen der Anwendung und Festlegen eines Haltepunkts in der folgenden Zeile in onCreate
:
Ich habe herausgefunden, dass mActionBar nach der Rotation null ist. Das Einfügen dieser Zeile in onCreateView
hat nicht geholfen.
Was ich versucht habe
mActionBar
in
onAttach
onActivityCreated
onCreate
/ onCreateView
direkt vor .setTitle wird Ich habe keine Ideen und bin dankbar für Ratschläge.
EDIT-0 (30.07.)
Ausnahme wird ausgelöst (nach der Bearbeitung nach Alex Vorschlag )
%Vor% MyListFragment
Zeile 54 (Ausnahme bei Verwendung von SingleFragmentActivity und ActionBarActivity als Besetzung)
SingleFragmentActivity
Zeilen 20-22:
Jetzt sollte es eigentlich sein:
%Vor%, weil ActionBarActivity veraltet ist.
Aber das ist nur, wenn Sie dies außerhalb einer Aktivität tun müssen, wo es am häufigsten geschieht.
Obwohl diese Antwort sehr spät gegeben wird, kann sie jemandem helfen. Wir können direkt folgenden Code aufrufen: ((AppCompatActivity)getActivity()).getSupportActionBar().setTitle("String");
Es funktioniert auch gut.