【问题标题】:IllegalStateException randomely throwed at activity launch活动启动时随机抛出 IllegalStateException
【发布时间】:2016-02-22 12:03:28
【问题描述】:

当我运行我的活动时,我会随机收到一个IllegalStateException: You need to use a Theme.AppCompat theme。我只需要重建项目并在下一次运行时开始活动,但经过一些运行后,我再次遇到异常。

我检查了我的应用程序和活动主题是否继承自 Theme.AppCompat。我所有的活动都延伸到FragmentActivity

我在 API 22 (Android 5.1.1) 上遇到异常,我正在运行 Android Studio 2.0 Beta 5

编辑

我使用的是 Android Studio 1.5,但没有收到错误消息。似乎在 AS 2.0 上,我的活动中的super 指的是AppCompatActivity,而不是继承的类FragmentActivity。我无法理解这种行为

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="eu.heyway.heywayandroid">

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/Theme.AppCompat.NoActionBar"
        android:name=".HeyWayApplication">
        <activity
            android:name=".login.FacebookLoginActivity"
            android:theme="@style/AppTheme.TriangleBackground">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".configuration.ConfigurationActivity"
            android:label="@string/title_activity_configuration"
            android:theme="@style/AppTheme.TriangleBackground" />
        <activity android:name=".home.HomeActivity"
            android:theme="@style/AppTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

styles.xml

<!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:windowBackground">@color/colorPrimary</item>
        <item name="windowNoTitle">true</item>
        <item name="windowActionBar">false</item>
    </style>

    <style name="AppTheme.TriangleBackground" parent="AppTheme">
        <item name="android:windowBackground">@drawable/background_full</item>
    </style>

我所有的活动都扩展了这个类:

public class BaseActivity extends FragmentActivity {

    @Override
    protected void attachBaseContext(Context newBase) {
        super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
    }
}

我想知道是否应该将此报告为错误或我做错了什么。

【问题讨论】:

  • “我的所有活动都扩展了 FragmentActivity”——要么将它们更改为扩展 AppCompatActivity,要么停止使用 Theme.AppCompat。 Theme.AppCompat 供 AppCompatActivity 使用,而不是 FragmentActivity 或 Activity。
  • FragmentActivity 和 Theme.AppCompat -- 导致问题。我在这里第二个 CommonsWare 解决方案。
  • 我在使用 AppCompatActivity 时遇到了同样的问题。其实我在看到问题后从 AppCompatActivity 改变了
  • 另外,当我更改清单中的某些内容时,下次启动时不会显示该错误。我想知道 Android Studio 的新快速构建功能是否对此不负责。

标签: android android-studio android-manifest android-theme android-studio-2.0-beta5


【解决方案1】:

在您的清单中,您缺少 minSdk 和 targetSdk 条目。设置最小和目标 sdk 版本。还要确保包含支持库。如果那没有解决,也尝试使用 Holo Themes 并查看错误是否出现。

【讨论】:

  • minSdk 和 targetSdk 由 gradle 设置。包括支持库。如果我可以避免使用 Holo 它们也很棒。
猜你喜欢
  • 2013-12-24
  • 2013-12-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多