从ActionBarSherlock更新到AppCompatActivity时出现NoSuchFieldError

时间:2019-02-13 22:23:02

标签: android android-actionbar actionbarsherlock appcompatactivity

我正在将一个应用程序从API 9更新为实现ActionBarSherlock的API 28。我一直在关注许多教程(特别是this one),以从ActionBarSherlock升级到ActionBarActivity,并对其进行了一些微调,以将ActionBarActivity更新为AppCompatActivity。

我遇到的问题是,在完全升级之后,我遇到了ActionBarSherlock的attrs之一的运行时崩溃,我似乎无法删除或覆盖它,因为appcompat v7正在使用它。

java.lang.NoSuchFieldError: No static field ActionBar_displayOptions of type I in class Landroid/support/v7/appcompat/R$styleable; or its superclasses (declaration of 'android.support.v7.appcompat.R$styleable' appears in /data/app/com.android.app-OJqieQQnVdzAHNjYAKgnhA==/split_lib_slice_0_apk.apk)
    at android.support.v7.widget.ToolbarWidgetWrapper.<init>(ToolbarWidgetWrapper.java:133)
    at android.support.v7.widget.ToolbarWidgetWrapper.<init>(ToolbarWidgetWrapper.java:96)
    at android.support.v7.widget.Toolbar.getWrapper(Toolbar.java:2112)
    at android.support.v7.widget.ActionBarOverlayLayout.getDecorToolbar(ActionBarOverlayLayout.java:547)
    at android.support.v7.widget.ActionBarOverlayLayout.pullChildren(ActionBarOverlayLayout.java:539)
    at android.support.v7.widget.ActionBarOverlayLayout.setWindowCallback(ActionBarOverlayLayout.java:615)
    at android.support.v7.app.AppCompatDelegateImpl.createSubDecor(AppCompatDelegateImpl.java:611)
    at android.support.v7.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:518)
    at android.support.v7.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:466)
    at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)
    at com.android.app.ui.activity.LoginActivity.onCreate(LoginActivity.java:40)

然后检查abs__attrs.xml文件,我可以看到attr:

<attr name="displayOptions">

    <flag name="useLogo" value="0x1" />
    <flag name="showHome" value="0x2" />
    <flag name="homeAsUp" value="0x4" />
    <flag name="showTitle" value="0x8" />
    <flag name="showCustom" value="0x10" />
    <flag name="disableHome" value="0x20" />

</attr>

如果我删除或更改了它的名称,编译器会抱怨,并且不允许我运行构建项目-但它应该从v7支持库获取该字段,对吗?

无论如何,我都尝试将活动主题更改为

"android:theme=@style/Theme.AppCompat.Light.NoActionBar"

,并且没有ActionBar就可以加载它,因此我在这里猜测问题确实与ActionBar有关。有任何想法吗?

干杯!

1 个答案:

答案 0 :(得分:0)

问题出在支持库上,再次下载它解决了该问题!