簡體   English   中英

使用appcompat-v7 22.2.1或更高版本時,getSupportActionBar()會引發NPE

[英]getSupportActionBar() throws NPE when using appcompat-v7 22.2.1 or newer

我在Values / Styles.xml中有一個使用以下主要主題的應用程序

<style name="AppTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
  <item name="actionBarStyle">@style/MyActionBar</item>
  <item name="actionBarTabStyle">@style/ActionBarTabStyle.Example</item>
  <item name="actionBarTabTextStyle">@style/tabtextcolor</item>
  <item name="colorPrimary">@color/primary_blue</item>
  <item name="colorPrimaryDark">@color/primary_darker_blue</item>
  <item name="android:windowContentOverlay">@null</item>
  <item name="colorAccent">@color/primary_blue</item>
</style>

<style name="MyActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
    <item name="windowActionBar">true</item>
    <item name="windowNoTitle">false</item>
    <item name="background">@color/primary_blue</item>
    <item name="backgroundStacked">@android:color/white</item>
    <item name="backgroundSplit">@color/primary_blue</item>
    <item name="icon">@android:color/transparent</item>
    <item name="popupMenuStyle">@style/PopupMenu.Example</item>
    <item name="android:titleTextStyle">@style/Widget.Carrental.TitleTextStyle</item>
    <item name="titleTextStyle">@style/Widget.Carrental.TitleTextStyle</item>
</style>

<style name="Widget.Carrental.TitleTextStyle" parent="@android:style/Widget.TextView">
 <item name="android:textSize">20sp</item>
 <item name="android:textColor">@android:color/white</item>
 <item name="android:alpha">1</item>
</style>

<style name="tabtextcolor" parent="@style/Widget.AppCompat.ActionBar.TabText">
 <item name="android:textColor">@android:color/black</item>
</style>

<style name="ActionBarTabStyle.Example" parent="@style/Widget.AppCompat.ActionBar.TabView">
 <item name="android:background">@drawable/tab_indicator_ab_example</item>
</style>

當我在Kitkat和Lollipop上使用appcompat-v7 22.2.1時,所有這些工作正常。

我必須添加一個編譯依賴項,該依賴項在values / style.xml中具有以下主題

<style name="AppTheme.Transparent" parent="AppTheme.Transparent.Base" />

<style name="AppTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:windowContentOverlay">@null</item>
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <!-- Main theme colors -->
    <!--   your app branding color for the app bar -->
    <item name="colorPrimary">@color/primary</item>
    <!--   darker variant for the status bar and contextual app bars -->
    <item name="colorPrimaryDark">@color/primary_dark</item>
    <!--   theme UI controls like checkboxes and text fields -->
    <item name="colorAccent">@color/accent</item>
</style>

<style name="AppTheme.Transparent.Base" parent="AppTheme.Base">
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowIsTranslucent">true</item>
</style>

這些在values-21 / styles.xml中

<style name="AppTheme" parent="AppTheme.Base">
  <item name="android:windowContentTransitions">true</item>
  <item name="android:windowAllowEnterTransitionOverlap">true</item>
  <item name="android:windowAllowReturnTransitionOverlap">true</item>
  <item name="android:windowSharedElementEnterTransition">@android:transition/move</item>
  <item name="android:windowSharedElementExitTransition">@android:transition/move</item>
</style>

<style name="AppTheme.Transparent" parent="AppTheme.Transparent.Base">
    <item name="android:statusBarColor">@android:color/transparent</item>
</style>

現在,當我嘗試運行我的應用程序時,代碼中的NPE失敗了

getSupportActionBar().hide();

這是NPE;

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.app.ActionBar.hide()' on a null object reference

我確保所有活動類都擴展了AppCompatActivity,但是我仍然得到相同的NPE。 因此,我在依賴庫的主題中評論了以下字段。

    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>

這次我的應用程序沒有通過NPE失敗,但是當控件傳遞到依賴項庫中的代碼時,我在logcat中看到此消息。

I/AppCompatDelegate: The Activity's LayoutInflater already has a Factory installed so we can not install AppCompat's

我想,如果你開始

    <item name="windowActionBar">false</item>

您需要setSupportActionBar(uToolbar)。 如果您無法使用工具欄,則可以嘗試

    <item name="windowActionBar">true</item>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM