在计算机之间移动后启动应用程序时出现IllegalStateException

时间:2016-02-07 20:49:00

标签: java android xml themes

TL;博士

这些确切的文件在一个工作站上工作,而不是另一个工作站。

我得到了什么(错误)

FATAL EXCEPTION: main                                                  

  java.lang.RuntimeException: Unable to start activity 
  ComponentInfo{com.example.erik.recipefriend2/com.example.erik.recipefriend2.MainActivity}: 
  java.lang.IllegalStateException: You need to use a 
  Theme.AppCompat theme (or descendant) with this activity.

错误在第26行,在我的情况下是这样的:

setSupportActionBar(toolbar);

我做了什么正如主题所说,我一直在将我的Android Studio项目从我的固定电脑移到笔记本电脑上。我一直在使用Git和Bitbucket能够在两台计算机上工作。当我拉动项目并尝试运行它时,我收到上面显示的错误消息。当我从我的固定计算机上压缩项目并将其解压缩并在我的笔记本电脑上启动时,我得到了同样的错误。最后,我将不相关的文件(类文件,drawables和xml文件)粘贴到新创建的项目中,但我仍然得到错误。

我的想法已经不多了。我还有线路检查我的固定电脑上的课程,并将它们与笔记本电脑上的线路进行比较,但无济于事。

我将包括我认为参与此事的类和xmls。

styles.xml

<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="android:actionOverflowButtonStyle">@style/OverFlow</item>
</style>

<style name="ThemeOverlay.RecipesApp" parent="Theme.AppCompat.NoActionBar">
    <item name="android:colorBackground">@color/colorGreen</item>
    <item name="android:textColor">#FFFFFF</item>
</style>

<style name="OverFlow" parent="Widget.AppCompat.ActionButton.Overflow">
    <item name="android:src">@drawable/ic_menu_white_24dp</item>


</style>


</resources>

的AndroidManifest.xml

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

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:theme="@style/AppTheme.NoActionBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

</manifest>

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout     xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context="com.example.erik.recipefriend2.MainActivity">

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:popupTheme="@style/ThemeOverlay.RecipesApp" />

</android.support.design.widget.AppBarLayout>

<include layout="@layout/content_main" />

<android.support.design.widget.FloatingActionButton
    android:id="@+id/addIngredient"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|right"
    android:layout_margin="16dp"
    app:backgroundTint="#91FF93"
    android:tint="#FFFFFF"
    android:onClick="goToAdd"
    android:scaleType="fitCenter"
    android:src="@android:drawable/ic_input_add" />

<android.support.design.widget.FloatingActionButton
    android:id="@+id/searchRecipe"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:backgroundTint="#91FF93"
    android:src="@android:drawable/ic_search_category_default"
    android:layout_margin="16dp"
    android:tint="#FFFFFF"
    android:scaleType="fitCenter"
    android:onClick="goToSearch"
    android:layout_gravity="bottom|left"
    />


</android.support.design.widget.CoordinatorLayout>

MainActivity.java

package com.example.erik.recipefriend2;

import android.graphics.Color;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.MenuInflater;
import android.view.View;
import android.view.Menu;
import java.lang.reflect.Method;

public class MainActivity extends AppCompatActivity {



   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
       toolbar.setTitleTextColor(Color.WHITE);
       setSupportActionBar(toolbar);
       android.support.v7.app.ActionBar actionBar = getSupportActionBar();
       actionBar.setLogo(R.mipmap.ic_launcher);
       actionBar.setDisplayUseLogoEnabled(true);
       actionBar.setDisplayShowHomeEnabled(true);
       FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.addIngredient);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });
   }
   @Override
   public boolean onCreateOptionsMenu(Menu menu){
       MenuInflater menuInflater = getMenuInflater();
       menuInflater.inflate(R.menu.activity_main_actions, menu);
       return super.onCreateOptionsMenu(menu);
   }
   @Override
      protected boolean onPrepareOptionsPanel(View view, Menu menu) {
      if (menu != null) {
        if (menu.getClass().getSimpleName().equals("MenuBuilder")) {
            try {
                Method m = menu.getClass().getDeclaredMethod(
                        "setOptionalIconsVisible", Boolean.TYPE);
                m.setAccessible(true);
                m.invoke(menu, true);
            } catch (Exception e) {
                Log.e(getClass().getSimpleName(), "onMenuOpened...unable to set icons for overflow menu", e);
            }
        }
    }
    return super.onPrepareOptionsPanel(view, menu);
   }
   public void goToAdd(View view){

   }
   public void goToSearch(){

   }


}

问题是什么?此外,如果需要更多文件,我也很乐意展示它们。

1 个答案:

答案 0 :(得分:1)

在您的活动中,您定义android:theme="@style/AppTheme.NoActionBar",而不在样式中的任何位置定义AppTheme.NoActionBar。令人困惑的是,这会编译,但会解释为什么会出现错误。