带有appcompat库v7的ActionBar(ava.lang.IllegalStateException:您需要使用Theme.AppCompat主题)

时间:2015-05-22 09:14:04

标签: java android android-actionbar appcompat-v7-r22.1 appcompat-v7-r21

我想用Android v7 appcompat库实现ActionBar,以支持Android的ActionBar> = 2.1

我的应用程序以MainActivity开头,其中包含一个黑暗的Actionbar,一些信息和一个开始按钮。

下一个活动是MenuActivity,它还包含黑暗的Actionbar和一些可以滑动的ActionBar标签

这是我的manifest.xml ,其中包含DarkActionBar主题:

<application
    android:icon="@mipmap/ic_launcher"
    android:label="Hello World"
    android:theme="@android:style/Theme.Holo.Light.DarkActionBar">

    <activity
        android:name=".MainActivity"
        android:label="Hello World">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity
        android:name=".gui.MenuActivity"
        android:label="Hello World" />

</application>

这是 MainActivity 之后的 MenuActivity ,其中还包含操作栏以及一些导航标签:

package myapp.gui;

import android.support.v4.app.FragmentTransaction;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuInflater;
import myapp.R;

public class MenuActivity extends ActionBarActivity implements ActionBar.TabListener {

    AppSectionsPagerAdapter mAppSectionsPagerAdapter;
    ViewPager mViewPager;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_menu);

        mAppSectionsPagerAdapter = new AppSectionsPagerAdapter(getSupportFragmentManager());
        ActionBar actionBar = getSupportActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        mViewPager = (ViewPager) findViewById(R.id.pager);
        mViewPager.setAdapter(mAppSectionsPagerAdapter);
        mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
            @Override
            public void onPageSelected(int position) {
                actionBar.setSelectedNavigationItem(position);
            }
        });

        actionBar.addTab(actionBar.newTab().setText("Home").setTabListener(this));
        actionBar.addTab(actionBar.newTab().setText("Imprint").setTabListener(this));
    }

    ... 
}

如果我启动应用程序,MainActivity可以正常工作,但点击开始按钮并加入MenuActivity后,我收到此错误:

  

java.lang.RuntimeException:无法启动活动   ComponentInfo {} myapp.gui.MenuActivity:   java.lang.IllegalStateException:您需要使用Theme.AppCompat   这个活动的主题(或后代)。

我找到了一些解决方案,但不适合我的问题。有人可以帮帮我吗?

我还想知道我的解决方案是最新的还是过时的?

谢谢:)

2 个答案:

答案 0 :(得分:3)

将AndroidManifest.xml中的@android:style/Theme.Holo.Light.DarkActionBar替换为@style/Theme.AppCompat.Light.DarkActionBar

确保build.gradle中包含以下依赖项:compile 'com.android.support:appcompat-v7:22.1.1'

编辑:查看Knossos的第一条评论!

答案 1 :(得分:-1)

如果您在SELECT DISTINCT ID, TIME, VALUE FROM (partition by Id & order by Id asc on my table Tbl)中展开ActionBarActivity,则还必须更改MainActivity中的父主题。 因此values-v11中的style.xml将是 -

 
values-v11

并确保使用@ <?xml version="1.0" encoding="utf-8"?> <resources> <style name="QueryTheme" parent="@style/Theme.AppCompat"> <!-- Any customizations for your app running on devices with Theme.Holo here --> </style> </resources> 替换@android:style/Theme.Holo.Light.DarkActionBar中的AndroidManifest.xml