Android: getSupportActionBar () всегда возвращает ноль в библиотеке ActionBarSherlock - PullRequest
66 голосов
/ 03 сентября 2011

Я пытаюсь использовать библиотеку ActionBarSherlock для обеспечения обратно совместимой поддержки ActionBar с вкладками в моем приложении для Android, поэтому я скачал последнюю сборку, собрал демо и запустил ее.

Если вы перейдете на панель действий, а затем выберите вкладку «Навигация», она каждый раз вылетает. Вот трассировка стека:

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  

Я не могу двигаться вперед с моим приложением, пока это не будет исправлено. Я написал кучу кода, настроил панель действий в своем приложении и попытался запустить ее, и она вылетает с NPE из-за нулевого возвращаемого значения при вызове getSupportActionBar().

Соответствующий код на самом деле находится в демоверсии библиотеки:

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

Ответы [ 14 ]

1 голос
/ 10 июля 2013

всякий раз, когда мы устанавливаем customview, используя библиотеку sherlock. просто удалите этот requestWindowFeature (Window.FEATURE_NO_TITLE); вот так мы делаем customview, используя библиотеку sherlock bar ..

            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");
0 голосов
/ 16 сентября 2016

Я делаю эту ошибку, потому что я добавляю toobar в XML-файл фрагмента.Код для поиска панели инструментов во фрагменте таков: getActivity (). FindViewByid (id ...), но моя панель инструментов находится в файле фрагмента xml, так что панель инструментов не найдена и панель инструментов не установлена ​​setSipprotActionBar (), а также ничего не полученокогда getSupportActionBar ().Запомните: Не помещайте панель инструментов в XML-файл вашего фрагмента.

0 голосов
/ 14 августа 2015

Я добавил android:theme="@android:style/Theme.Dialog" к своей активности в файле манифеста Android, чтобы попытаться сделать это диалоговым действием.Это также удалит панель действий, следовательно, нулевой указатель.Удали его или не звони getSupportActioBar

0 голосов
/ 20 января 2014

Я столкнулся с этим после добавления библиотеки в мой проект. Средство защиты заключалось в том, чтобы заглянуть в библиотеку и удалить любое имя стиля «AppTheme», если вы используете это же имя темы в манифесте. На моей Galaxy S4, Jelly Bean не было конфликта, в то время как на моей Galaxy Tab был конфликт.

...