Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

You need to use a Theme.AppCompat theme (or descendant) with this activity. Change to Theme.AppCompat causes other error

I use appcompat v22.1.0 in my App and use Toolbar. Everything was fine when I use Theme.AppCompat.Light.NoActionBar. When I start implement AlertDialog, it produce error like this:

java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.         at android.support.v7.app.AppCompatDelegateImplBase.onCreate(AppCompatDelegateImplBase.java:113)         at android.support.v7.app.AppCompatDelegateImplV7.onCreate(AppCompatDelegateImplV7.java:146)         at android.support.v7.app.AppCompatDialog.<init>(AppCompatDialog.java:47)         at android.support.v7.app.AlertDialog.<init>(AlertDialog.java:92)         at android.support.v7.app.AlertDialog$Builder.create(AlertDialog.java:882)         at com.ramabmtr.map.findingmoo.MainActivity.onOptionsItemSelected(MainActivity.java:216)         at android.app.Activity.onMenuItemSelected(Activity.java:2572)         at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:353)         at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:144)         at android.support.v7.internal.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:99)         at android.support.v7.internal.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:99)         at android.support.v7.internal.app.ToolbarActionBar$2.onMenuItemClick(ToolbarActionBar.java:74)         at android.support.v7.widget.Toolbar$1.onMenuItemClick(Toolbar.java:164)         at android.support.v7.widget.ActionMenuView$MenuBuilderCallback.onMenuItemSelected(ActionMenuView.java:740)         at android.support.v7.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:802)         at android.support.v7.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:153)         at android.support.v7.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:949)         at android.support.v7.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:939)         at android.support.v7.widget.ActionMenuView.invokeItem(ActionMenuView.java:598)         at android.support.v7.internal.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:139)         at android.view.View.performClick(View.java:4084)         at android.view.View$PerformClick.run(View.java:16989)         at android.os.Handler.handleCallback(Handler.java:615)         at android.os.Handler.dispatchMessage(Handler.java:92)         at android.os.Looper.loop(Looper.java:137)         at android.app.ActivityThread.main(ActivityThread.java:4812)         at java.lang.reflect.Method.invokeNative(Native Method)         at java.lang.reflect.Method.invoke(Method.java:511)         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:559)         at dalvik.system.NativeStart.main(Native Method) 

Based on that error, I change my theme to Theme.AppCompat and put this:

<item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> 

to my theme. But it produce the same error.

Style.xml (old)

<resources> <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">     <item name="colorPrimary">@color/colorPrimary</item>     <item name="colorPrimaryDark">@color/colorPrimaryDark</item> </style> </resources> 

Style.xml (new)

<resources> <style name="AppTheme" parent="Theme.AppCompat">     <item name="windowActionBar">false</item>     <item name="windowNoTitle">true</item>     <item name="colorPrimary">@color/colorPrimary</item>     <item name="colorPrimaryDark">@color/colorPrimaryDark</item> </style> </resources> 

Anyone knows how to fix it??

MainActivity.java

package com.ramabmtr.map.findingmoo;  import android.content.DialogInterface; import android.graphics.Typeface; import android.os.Bundle; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import android.view.View; import android.widget.TextView; import android.widget.Toast;  public class MainActivity extends AppCompatActivity {  private Toolbar toolbar; private TextView toolbarTitle;  @Override protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.activity_main);      toolbar = (Toolbar) findViewById(R.id.toolbar);     setSupportActionBar(toolbar);     getSupportActionBar().setDisplayShowTitleEnabled(false);      Typeface myTypeface = Typeface.createFromAsset(getAssets(), "fonts/panpizza.ttf");     toolbarTitle = (TextView) findViewById(R.id.toolbar_title);     toolbarTitle.setTypeface(myTypeface);      AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());     builder.setTitle(R.string.filter_title);     builder.setMessage("test");     builder.setPositiveButton(R.string.ok_button, new DialogInterface.OnClickListener() {         @Override         public void onClick(DialogInterface dialog, int id) {             dialog.dismiss();         }     });     builder.setNegativeButton(R.string.cancel_button, new DialogInterface.OnClickListener() {         @Override         public void onClick(DialogInterface dialog, int id) {             dialog.dismiss();         }     });     AlertDialog dialog = builder.create();     dialog.show(); } } 
like image 395
Rama Bramantara Avatar asked May 12 '15 01:05

Rama Bramantara


People also ask

Is an AppCompat widget that can only be used with a theme AppCompat?

AppCompatTextView is an AppCompat widget that can only be used with a Theme.

What is theme AppCompat?

The AppCompat support library provides themes to build apps with the Material Design specification. A theme with a parent of Theme. AppCompat is also required for an Activity to extend AppCompatActivity . The first step is to customize your theme's color palette to automatically colorize your app.

What is the difference between activity and AppCompatActivity?

Activity is the basic one. Based on Activity , FragmentActivity provides the ability to use Fragment . Based on FragmentActivity , AppCompatActivity provides features to ActionBar .


1 Answers

Fixed my problem by using MainActivity.this (or YourActivityName.this)

AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(MainActivity.this); 

Make sure you already Theme.AppCompat and extending AppCompatActivity.

like image 157
mariozawa Avatar answered Nov 16 '22 02:11

mariozawa