67

ActionBarSherlockライブラリを使用して、Android アプリのタブで後方互換性のある ActionBar サポートを提供しようとしているので、最新のビルドをダウンロードし、デモをビルドして実行しました。

アクションバーに移動してからタブナビゲーションを選択すると、毎回クラッシュします。スタック トレースは次のとおりです。

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  

これが修正されるまで、アプリを進めることはできません。たくさんのコードを書き、アプリにアクション バーを設定して実行しようとしましたが、getSupportActionBar()呼び出しの戻り値が null のため、NPE でクラッシュします。

関連するコードは、実際にはライブラリのデモにあります。

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) {
    }
}
4

14 に答える 14

83

Sherlock テーマをアプリケーションに追加する必要があります

<application android:icon="@drawable/icon" android:label="@string/app_name"
        android:debuggable="false" android:theme="@style/Theme.Sherlock">
于 2011-09-04T17:23:00.657 に答える
62

Android ICS 4.0.4 でも同じ問題が発生しました。私はrequestWindowFeature(Window.FEATURE_NO_TITLE);FragmentActivity で使用していましたが、これにより ICS+ デバイスで ActionBar が非getSupportActionBar()表示になり、null になりました。

単に削除しました:
requestWindowFeature(Window.FEATURE_NO_TITLE);

そして、それは魅力のように機能しました。

それが誰かを助けることを願っています。

于 2012-04-12T13:30:35.390 に答える
15

null を取得するもう1つの理由は、フラグメントを追加するgetSupportActionBar()前または例でそれを呼び出そうとすることです。setContentView(R.layout.main)

oncreate をリファクタリングし、誤ってgetSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);afterを配置しましたsuper.onCreate(savedInstanceState);

于 2011-11-26T16:24:17.453 に答える
12

これは面白いものです: テーマを - に設定しないでください。

    android:theme="@style/Theme.NoActionbar"
于 2013-09-19T20:26:21.310 に答える
6

null を取得するもう 1 つの理由getSupportActionBar()は、アクティビティが Honeycomb+ の TabHost で使用されている場合です。

于 2012-07-11T09:51:24.157 に答える
2

マニフェストを変更しました

android:theme="@style/AppTheme.NoActionBar"

に:

  android:theme="@style/AppTheme"

そしてエラーはなくなりました

于 2016-12-08T09:31:04.193 に答える
1

android:theme="@android:style/Theme.Dialog"ダイアログ アクティビティにしようとして、Android マニフェスト ファイルのアクティビティに追加しました。これもアクションバーを削除するため、ヌルポインターになります。削除するか、電話しないでくださいgetSupportActioBar

于 2015-08-13T22:13:35.317 に答える
1

(ばかげて)電話するのを忘れた後、私はこの問題を抱えていましたsuper.onCreate()

于 2014-01-24T20:41:29.280 に答える
1

sherlock ライブラリを使用して customview を設定するたびに。この requestWindowFeature(Window.FEATURE_NO_TITLE); を削除するだけです。このように、シャーロックバーライブラリを使用してカスタムビューを作成します..

            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");
于 2013-07-10T10:57:10.807 に答える
0

フラグメント xml ファイルにツールバーを追加するため、この間違いを犯します。フラグメントでツールバーを見つけるコードは次のとおりです:getActivity().findViewByid(id...)、しかし私のツールバーはフラグメントxmlファイルにあるため、ツールバーが見つからず、setSipprotActionBar()を実行しているツールバーも何も取得されませんgetSupportActionBar() の場合。覚えておいてください:フラグメントの xml ファイルにツールバーを入れないでください。

于 2016-09-16T13:03:26.717 に答える
0

プロジェクトにライブラリを追加した後、これに遭遇しました。マニフェストで同じテーマ名を使用している場合、解決策は、ライブラリを調べてスタイル名「AppTheme」を削除することでした。Galaxy S4 の Jelly Bean では競合が発生しませんでしたが、Galaxy Tab では競合が発生しました。

于 2014-01-20T17:10:20.727 に答える