ActionBarCompat: java.lang.IllegalStateException: вам нужно использовать Theme.AppCompat

Я получаю RuntimeException на Android 2.3.5, но я использую Theme.AppCompat (res / values ​​/ themes.xml). Это телефон: http://www.gsmarena.com/samsung_galaxy_y_s5360-4117.php

<!-- res/values/themes.xml --> <?xml version="1.0" encoding="utf-8"?> <resources> <style name="Theme.Styled" parent="@style/Theme.AppCompat"> <item name="actionBarStyle">@style/QueryActionBar</item> <item name="android:actionBarStyle">@style/QueryActionBar</item> </style> <style name="QueryActionBar" parent="@style/Widget.AppCompat.ActionBar"> <item name="background">@color/blueback</item> <item name="android:background">@color/blueback</item> <item name="backgroundSplit">@color/blueback</item> <item name="android:backgroundSplit">@color/blueback</item> </style> </resources> 

Вот файл для значений-v11.

  <!-- res/values-v11/themes.xml --> <?xml version="1.0" encoding="utf-8"?> <resources> <style name="QueryTheme" parent="@android:style/Theme.Holo"> <!-- Any customizations for your app running on devices with Theme.Holo here --> </style> </resources> 

Вот ошибка.

  java.lang.RuntimeException: Unable to start activity ComponentInfo{com.txt2lrn.www/com.txt2lrn.www.LandingActivity}: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity. at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) at android.app.ActivityThread.access$1500(ActivityThread.java:117) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:130) at android.app.ActivityThread.main(ActivityThread.java:3687) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:507) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity. at android.support.v7.app.ActionBarActivityDelegate.onCreate(ActionBarActivityDelegate.java:102) at android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.java:98) at com.txt2lrn.www.LandingActivity.onCreate(LandingActivity.java:95) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615) ... 11 more 

Извините, у меня также есть андроид: theme = "@ style / Theme.Styled", определенный в AndroidManifest.xml.

Solutions Collecting From Web of "ActionBarCompat: java.lang.IllegalStateException: вам нужно использовать Theme.AppCompat"

Если вы расширяете ActionBarActivity в своей MainActivity, вам также придется изменить родительскую тему в значениях-v11.
Таким образом, style.xml в значениях-v11 будет –

  <!-- res/values-v11/themes.xml --> <?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> 

EDIT: я бы рекомендовал вам прекратить использование ActionBar и начать использовать макет AppBar, включенный в библиотеку поддержки дизайна Android

Чтобы просто добавить ActionBar Compat, ваша активность или приложение должны использовать тему @ style / Theme.AppCompat в AndroidManifest.xml следующим образом:

  <activity ... android:theme="@style/Theme.AppCompat" /> 

Это добавит панель действий в действие (или все действия, если вы добавили эту тему в приложение)


Но обычно вам нужно настроить панель действий. Для этого вам нужно создать два стиля с родительским элементом Theme.AppCompat, например, «@ style / Theme.AppCompat.Light». Первый будет для api 11> = (версии андроида со сборкой в ​​панели действий android), второй для api 7-10 (без сборки в панели действий).

Давайте посмотрим на первый стиль. Он будет находиться в res / values-v11 / styles.xml . Это будет выглядеть так:

 <style name="Theme.Styled" parent="@style/Theme.AppCompat.Light"> <!-- Setting values in the android namespace affects API levels 11+ --> <item name="android:actionBarStyle">@style/Widget.Styled.ActionBar</item> </style> <style name="Widget.Styled.ActionBar" parent="@style/Widget.AppCompat.Light.ActionBar"> <!-- Setting values in the android namespace affects API levels 11+ --> <item name="android:background">@drawable/ab_custom_solid_styled</item> <item name="android:backgroundStacked" >@drawable/ab_custom_stacked_solid_styled</item> <item name="android:backgroundSplit" >@drawable/ab_custom_bottom_solid_styled</item> </style> 

И вам нужно иметь такой же стиль для api 7-10. Он будет находиться в res / values ​​/ styles.xml , НО, потому что уровни api еще не знают о оригинальных элементах стиля панели задач Android, мы должны использовать один из них, предоставляемый библиотекой поддержки. Элементы управления ActionBar определяются так же, как и оригинальный Android, но без части «android:» спереди:

 <style name="Theme.Styled" parent="@style/Theme.AppCompat.Light"> <!-- Setting values in the default namespace affects API levels 7-11 --> <item name="actionBarStyle">@style/Widget.Styled.ActionBar</item> </style> <style name="Widget.Styled.ActionBar" parent="@style/Widget.AppCompat.Light.ActionBar"> <!-- Setting values in the default namespace affects API levels 7-11 --> <item name="background">@drawable/ab_custom_solid_styled</item> <item name="backgroundStacked">@drawable/ab_custom_stacked_solid_styled</item> <item name="backgroundSplit">@drawable/ab_custom_bottom_solid_styled</item> </style> 

Пожалуйста, отметьте, что даже если уровни api выше 10 уже имеют панель действий, вы все равно должны использовать стили AppCompat. Если вы этого не сделаете, у вас будет эта ошибка при запуске Acitvity на устройствах с Android 3.0 и выше:

Java.lang.IllegalStateException: вам нужно использовать тему Theme.AppCompat (или потомок) с этим действием.

Вот ссылка на эту оригинальную статью http://android-developers.blogspot.com/2013/08/actionbarcompat-and-io-2013-app-source.html, написанную Крисом Банесом.

PS Извините за мой английский

Проверьте и убедитесь, что у вас нет другой папки значений, которая ссылается на theme.styled и не использует тему AppCompat

values-v11 папка values-v11

Попробуй это…

styles.xml

 <resources> <style name="Theme.AppCompat.Light.NoActionBar" parent="@style/Theme.AppCompat.Light"> <item name="android:windowNoTitle">true</item> </style> </resources> 

AndroidManifest.xml

  <activity android:name="com.example.Home" android:label="@string/app_name" android:theme="@style/Theme.AppCompat.Light.NoActionBar" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> 

Ваша Activity расширяет ActionBarActivity которая требует применения AppCompat.theme . Перейдите из ActionBarActivity в Activity или FragmentActivity , он решит проблему.

Мой манифест не ссылается ни на какие темы … ему не должно быть AFAIK

Конечно. Ничто не собирается магически применять Theme.Styled к деятельности. Вам необходимо объявить, что ваша деятельность – или все ваше приложение – использует Theme.Styled , например:

 <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/Theme.Styled"> 

Просто сделайте это Build -> Clean Project. Я думаю, что это решит вашу проблему.

Я просто передаю свое приложение из ActionBarSherlock в ActionBarCompat. Попробуйте объявить свою старую тему следующим образом:

 <style name="Theme.Event" parent="Theme.AppCompat"> 

Затем установите тему в вашем AndroidManifest.xml:

 <application android:debuggable="true" android:name=".activity.MyApplication" android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/Theme.Event.Home" > 

У меня была такая авария на устройствах Samsung, даже несмотря на то, что активность действительно использовала Theme.AppCompat . Основная причина была связана со странной оптимизацией со стороны Samsung:

 - if one activity of your app has theme not inherited from Theme.AppCompat - and it has also `android:launchMode="singleTask"` - then all the activities that are launched from it will share the same Theme 

Мое решение было просто удалить android:launchMode="singleTask"

Я столкнулся с этой ошибкой, когда пытался создать DialogBox, когда какое-то действие было предпринято внутри класса CustomAdapter. Это не Activity, а класс Adapter. После 36 часов усилий и поиска решений я придумал это.

Отправьте Activity как параметр при вызове CustomAdapter.

 CustomAdapter ca = new CustomAdapter(MyActivity.this,getApplicationContext(),records); 

Определите переменные в пользовательском адаптере.

 Activity parentActivity; Context context; 

Вызовите конструктора следующим образом.

 public CustomAdapter(Activity parentActivity,Context context,List<Record> records){ this.parentActivity=parentActivity; this.context=context; this.records=records; } 

И, наконец, при создании диалогового окна внутри класса адаптера, сделайте это так.

 AlertDialog ad = new AlertDialog.Builder(parentActivity).setTitle("Your title"); and so on.. 

Я надеюсь, это поможет вам

В моем случае я сделал пользовательский вид, который я добавил в пользовательский конструктор вида

 new RoomView(getAplicationContext()); 

Правильный контекст – это активность, поэтому он изменил ее на:

 new RoomView(getActivity()); 

или

 new RoomView(this); 

Для моего просмотра списка используется пользовательский адаптер, который расширяет ArrayAdapter. В listiview у меня есть две кнопки одной из кнопок в качестве Custom AlertDialogBox. Пример: активность parentActivity; Конструктор для адаптера `

 public CustomAdapter(ArrayList<Contact> data, Activity parentActivity,Context context) { super(context,R.layout.listdummy,data); this.mContext = context; this.parentActivity = parentActivity; } 

`Вызов адаптера из MainActivty

 adapter = new CustomAdapter(dataModels,MainActivity.this,this); 

Para resolver o meu problema, eu apenas adicionei na minha MainActivity («Theme = Чтобы решить мою проблему, я просто добавил ее в свой MainActivity (« Theme = «@ style / MyTheme»), где MyTheme – это имя моей темы

 [Activity(Label = "Name Label", MainLauncher = true, Icon = "@drawable/icon", LaunchMode = LaunchMode.SingleTop, Theme = "@style/MyTheme")]