Ich versuche, die Bibliothek ActionBarSherlock zu verwenden, um abwärtskompatible ActionBar-Unterstützung mit Registerkarten in meiner Android-App bereitzustellen. Deshalb habe ich den neuesten Build heruntergeladen, die Demo erstellt und ausgeführt.
Wenn Sie zur Aktionsleiste wechseln, wählen Sie die Tab-Navigation, die jedes Mal abstürzt. Hier ist der Stack-Trace:
09-03 02:34:47.940: ERROR/AndroidRuntime(3078): FATAL EXCEPTION: main
09-03 02:34:47.940: ERROR/AndroidRuntime(3078): Java.lang.RuntimeException: Unable to start activity ComponentInfo{com.actionbarsherlock.sample.demos/com.actionbarsherlock.sample.demos.app.ActionBarTabNavigation}: Java.lang.NullPointerException
09-03 02:34:47.940: ERROR/AndroidRuntime(3078): at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:1748)
09-03 02:34:47.940: ERROR/AndroidRuntime(3078): at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:1764)
09-03 02:34:47.940: ERROR/AndroidRuntime(3078): at Android.app.ActivityThread.access$1500(ActivityThread.Java:122)
09-03 02:34:47.940: ERROR/AndroidRuntime(3078): at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1002)
09-03 02:34:47.940: ERROR/AndroidRuntime(3078): at Android.os.Handler.dispatchMessage(Handler.Java:99)
09-03 02:34:47.940: ERROR/AndroidRuntime(3078): at Android.os.Looper.loop(Looper.Java:132)
09-03 02:34:47.940: ERROR/AndroidRuntime(3078): at Android.app.ActivityThread.main(ActivityThread.Java:4025)
09-03 02:34:47.940: ERROR/AndroidRuntime(3078): at Java.lang.reflect.Method.invokeNative(Native Method)
09-03 02:34:47.940: ERROR/AndroidRuntime(3078): at Java.lang.reflect.Method.invoke(Method.Java:491)
09-03 02:34:47.940: ERROR/AndroidRuntime(3078): at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:841)
09-03 02:34:47.940: ERROR/AndroidRuntime(3078): at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:599)
09-03 02:34:47.940: ERROR/AndroidRuntime(3078): at dalvik.system.NativeStart.main(Native Method)
09-03 02:34:47.940: ERROR/AndroidRuntime(3078): Caused by: Java.lang.NullPointerException
09-03 02:34:47.940: ERROR/AndroidRuntime(3078): at com.actionbarsherlock.sample.demos.app.ActionBarTabNavigation.onCreate(ActionBarTabNavigation.Java:19)
09-03 02:34:47.940: ERROR/AndroidRuntime(3078): at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1048)
09-03 02:34:47.940: ERROR/AndroidRuntime(3078): at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:1712)
09-03 02:34:47.940: ERROR/AndroidRuntime(3078): ... 11 more
Ich kann mich mit meiner App nicht weiterbewegen, bis dies behoben ist. Ich habe eine Menge Code geschrieben, die Aktionsleiste in meiner App eingerichtet und versucht, ihn auszuführen. Er stürzt mit einem NPE ab, weil der Rückgabewert null beim Aufruf von getSupportActionBar()
zurückgegeben wird.
Der entsprechende Code befindet sich tatsächlich in der Demo für die Bibliothek:
public class ActionBarTabNavigation extends FragmentActivity implements ActionBar.TabListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getSupportFragmentManager()
.beginTransaction()
.add(Android.R.id.content, FragmentStackSupport.CountingFragment.newInstance(0))
.commit();
getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
for (int i = 0; i < 3; i++) {
ActionBar.Tab tab = getSupportActionBar().newTab();
tab.setText("Tab " + i);
tab.setTabListener(this);
getSupportActionBar().addTab(tab);
}
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
getSupportFragmentManager()
.beginTransaction()
.replace(Android.R.id.content, FragmentStackSupport.CountingFragment.newInstance(tab.getPosition()))
.commit();
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
}
}
Sie sollten das Sherlock-Design zu Ihrer Anwendung hinzufügen
<application Android:icon="@drawable/icon" Android:label="@string/app_name"
Android:debuggable="false" Android:theme="@style/Theme.Sherlock">
Ich hatte das gleiche Problem auf dem Android ICS 4.0.4. Ich habe requestWindowFeature(Window.FEATURE_NO_TITLE);
auf dem FragmentActivity verwendet, aber das hat das ausgeblendet ActionBar auf ICS + -Geräten, die dazu geführt haben, dass getSupportActionBar()
null ist.
Einfach das entfernt:requestWindowFeature(Window.FEATURE_NO_TITLE);
Und es funktionierte wie ein Zauber.
Hoffe es hilft jemandem.
Ein weiterer Grund dafür ist, dass dies bei Honeycomb + -Geräten der Fall ist, weil das Attribut windowNoTitle
in Ihrem Stil festgelegt ist. Befreien Sie sich davon, denn ActionBarSherlock entfernt es automatisch in Geräten von Honeycomb, die sich bereits vor Honeycomb befinden.
Ein anderer Grund, warum Sie null von getSupportActionBar()
bekommen könnten, ist der Versuch, es vor setContentView(R.layout.main)
aufzurufen oder in Ihrem Beispiel ein Fragment hinzuzufügen.
Ich habe oncreate überarbeitet und fälschlicherweise getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
nach super.onCreate(savedInstanceState);
gestellt.
Hier ist eine lustige: Das Thema nicht auf - setzen
Android:theme="@style/Theme.NoActionbar"
Ein weiterer Grund, warum Sie von getSupportActionBar()
null erhalten könnten, ist die Verwendung der Aktivität in einem TabHost auf Honeycomb +.
Abhängig davon, wie Ihr Code geschrieben wird. Stellen Sie sicher, dass Sie die Symbolleiste zuerst festgelegt haben, bevor Sie sie aufrufen.
mToolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(mToolbar);
getSupportActionBar().setDisplayShowHomeEnabled(true);
Ich habe mich gerade in Manifest geändert
Android:theme="@style/AppTheme.NoActionBar"
zu:
Android:theme="@style/AppTheme"
und der Fehler ist weg
sie sind Theme.Sherlock oder Theme.Sherlock.Light als Ihre Aktivität oder das -Anwendungsdesign im Manifest deklariert. Oder Sie verwenden ein benutzerdefiniertes Design, das von einer der beiden erbt
Beispiel:-
<application
Android:allowBackup="true"
Android:icon="@drawable/ic_launcher"
Android:label="@string/app_name"
Android:theme="@style/Theme.Sherlock.Light" >
sie können auch ein dunkles Thema verwenden: -
Android:theme="@style/Theme.Sherlock"
wann immer wir customview mit sherlock library einstellen. Entfernen Sie einfach dieses requestWindowFeature (Window.FEATURE_NO_TITLE); so machen wir customview mit sherlock bar library ..
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
getSupportActionBar().setCustomView(R.layout.header_sherlock_xmllayout);
header_tvleft = (TextView) findViewById(R.id.header_tvleft);
header_tvleft.setText("Back");
Ich hatte dieses Problem, nachdem ich vergessen hatte, super.onCreate()
Ich bin darauf gestoßen, nachdem ich meinem Projekt eine Bibliothek hinzugefügt habe. Das Hilfsmittel bestand darin, in der Bibliothek nachzuschauen und alle Stilnamen "AppTheme" zu entfernen, wenn Sie denselben Themennamen in Ihrem Manifest verwenden. Bei meinem Galaxy S4 (Jelly Bean) gab es keinen Konflikt, während bei meinem Galaxy Tab ein Konflikt auftrat.
Ich habe Android:theme="@Android:style/Theme.Dialog"
zu meiner Aktivität in der Android-Manifest-Datei hinzugefügt, um diese zu einer Dialogaktivität zu machen. Auch dies entfernt die Aktionsleiste und damit einen Nullzeiger. Entfernen Sie es oder rufen Sie nicht getSupportActioBar
auf.
Ich mache diesen Fehler, weil ich die Toobar in der Fragment-XML-Datei hinzufüge. Der Code, um die Symbolleiste in fragment zu finden, lautet: getActivity (). FindViewByid (id ...), aber meine Symbolleiste befindet sich in einer Fragment-XML-Datei, sodass keine Symbolleiste gefunden wurde und keine Symbolleiste setSipprotActionBar () und auch nichts erhalten wurde Wenn getSupportActionBar () . Denken Sie daran: Setzen Sie die Symbolleiste nicht in die XML-Datei Ihres Fragments.