Bu etkinlikle birlikte bir Theme.AppCompat teması (veya köken) kullanmanız gerekir


1004

Android Studio 0.4.5

Özel iletişim kutuları oluşturmak için Android belgeleri: http://developer.android.com/guide/topics/ui/dialogs.html

Özel bir iletişim kutusu istiyorsanız, Etkinliği, İletişim Kutusu API'larını kullanmak yerine iletişim kutusu olarak görüntüleyebilirsiniz. Basitçe bir etkinlik oluşturun ve temasını <activity>manifest öğesinde Theme.Holo.Dialog olarak ayarlayın :

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

Ancak, bunu denediğimde aşağıdaki istisnayı alıyorum:

java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity

Aşağıdakileri destekliyorum ve min için 10'dan büyük bir şey kullanamıyorum:

minSdkVersion 10
targetSdkVersion 19

Stillerimde aşağıdakiler var:

<!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

Ve tezahürümde bu etkinlik için var:

 <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:theme="@android:style/Theme.Holo.Light.Dialog"
            android:name="com.ssd.register.Dialog_update"
            android:label="@string/title_activity_dialog_update" >
        </activity>

İletişim kutusunu bu şekilde oluşturmak, düzeni zaten tamamladığım için yapmayı umduğum bir şeydi.

Birisi bana bu sorunun üstesinden nasıl gelebileceğimi söyleyebilir mi?


2
@Raghunandan, bu konuda yeniyim ama stillerime baktığımda aşağıdakiler var: <style name = "AppTheme" parent = "Theme.AppCompat.Light.DarkActionBar"> Ve şu ithalatlarım var: import android.support.v7 .app.ActionBarActivity; içe aktarma android.support.v7.app.ActionBar; ithalat android.support.v4.app.Fragment; Ama bunların ne anlama geldiğinden emin değilim.
ant2009

10
Kullandığınız AppCompatapi seviyesi 11. Hemen kullanıma aşağıdaki destek actionbars destek kütüphanesi oluşturmak olduğu android:theme="@style/AppTheme" >apaçık etkinlik için
Raghunandan

2
@ ant2009, @Raghunandan'ın söylediklerini iddia etmek AndroidManifest.xmliçin: sizin etkinliğiniz için belirlediğiniz tema, uygulamanız için belirttiğiniz temayı geçersiz kılar . Etiketi android:themesatırdan kaldırın <activity>.
cryptochronoconolite

3
Bunu yapmak hatayı ortadan kaldırır, ancak bir diyalog teması olan bir etkinlik olan olmasını istediğiniz yere götürmez. Genel kural, etkinliğinizin bir eylem çubuğuna sahip olmasını istiyorsanız, AppCompat temasına sahip olması ve java kodunun ActionBarActivity'yi genişletmesi gerektiğidir. Bir eylem çubuğuna (iletişim kutusu temalı etkinlik gibi) ihtiyaç duymayan bir etkinliğiniz varsa, ona herhangi bir tema uygulayabilirsiniz, ancak java kodu düz eski etkinliği genişletmelidir.
Bobbake4

1
Bu durumda tek sorun, Dialog yüklenicisi için sağladığınız bağlamdır. Cevabımı gör. stackoverflow.com/a/51574281/232727
Vitaliy A

Yanıtlar:


1124

Bu soruna sahip olmanızın nedeni, iletişim kutusu temasını uygulamaya çalıştığınız etkinliğin ActionBarActivity, AppCompattemanın uygulanmasını gerektiren genişlemesidir.

Güncelleme : Genişletmenin AppCompatActivityde bu sorunu olur

Bu durumda, Java devralma değiştirmek ActionBarActivityiçin Activity, olmayan bir ve olduğu gibi manifest'te iletişim tema terk Theme.AppCompatdeğeri


Genel kural, kodunuzun Android'in eski sürümlerini desteklemesini istiyorsanız, AppCompattemaya sahip olması ve java kodunun genişletilmesi gerektiğidir AppCompatActivity. Bu desteğe ihtiyaç duymayan bir etkinliğiniz * varsa, yalnızca Android'in en son sürümlerini ve özelliklerini önemsediğiniz gibi, herhangi bir temayı uygulayabilirsiniz, ancak java kodunun eskiyi genişletmesi gerekir Activity.


NOT: AppCompatActivity(veya bir alt sınıftan ActionBarActivity) Activitydeğerine değiştirildiğinde, "destek" içeren çeşitli çağrıları "destek" olmadan karşılık gelen çağrıya da değiştirmeniz gerekir . Yani, yerine getSupportFragmentManager, arayın getFragmentManager.


6
op, appcompat kullanıyor, bu durumda, söz konusu ActionBarActivityifadenin alt kısmındaki yorumdan içe aktarılan ifadelerinden gösterileni genişletmesi gerekiyor .
Raghunandan

2
@Bursos Android Studio'da yeni bir proje oluştururken bahsediyorsanız, bunun standart yapılandırmada bir hata olduğunu tahmin ediyorum.
Bobbake4

2
@ Bobbake4, Ben aynı sorunu yaşıyorum ve bu çözüm benim için çalışmak imkansız. ActionBarActivity'yi aktaran bir sürü sınıfım (tüm proje) var, çünkü Aktiviteyi genişletemem. Sorunun başka bir çözümü var mı? Teşekkürler
5er

6
@ 5er Java'nız ActionBarActivity kullanıyorsa, tema Theme.AppCompat öğesini genişletmelidir. Theme.AppCompat'ı genişleten bir avuç dahili tema var ya da kendiniz uzatabilir ve değiştirebilirsiniz. ActionBarActivity üst öğesini kaldırmadan Theme.AppCompat'ı kullanarak dolaşamazsınız.
Bobbake4

26
<Style name = "AppTheme" parent = "Theme.AppCompat.Light.DarkActionBar"> stilinde bu sorunumu çözdü. :)
Harmeet Singh

545

Tek yapmanız gereken dosyadaki android:theme="@style/Theme.AppCompat.Light"uygulama etiketinize eklemektir AndroidManifest.xml.


2
Kodda, ant2009, AppTheme'i tema olarak seçmiş ve bu uygulama Theme.AppCompat'ın bir neslinden uzanıyor. Bu işe yaramalı. Cihazımda 5.0'a yükselttikten sonra aynı sorunu yaşadım ve aktivitemdeki tema olarak @ style / Theme.AppCompat.Light ayarını tamamladım. Burada olmayan bir şey ...
speedynomads 18:14

36
Bu, Android Studio için geçerli bir cevap değildir, ancak bazı durumlarda styles.xml dosyalarını atladığında hızlı bir düzeltme olarak çalışacaktır. Android Studio'da temayı tanımlamanın doğru yolu, styles.xml dosyalarında tanımlamaktır ve daha sonra Android menifest dosyası yalnızca bunlara atıfta bulunur ve bunları cihazınızda hangi Android sürümüne bağlı olarak seçtiğinizi seçer. Genellikle android olarak ayarlanır: theme = "@ style / AppTheme" ve bu AppTheme, styles.xml dosyasındaki <style name = "Theme.AppTheme" parent = "Theme.AppCompat.Light"> anlamına gelir
zeeshan

5
Bu benim için gerçekten işe yaramadı çünkü holo dışında bir şey kullandığımda başlık çubuklarım kayboldu ...
AndyD273

1
SnackBar'ı kullanarak da bu sorunla karşılaştım. Bu benim sorunumu çözdü.
çalıştı

2
@Martin, benim gibi iseniz, genel dosya styles.xml dosyasına (V21) styles.xml dosyasına (V21'e özgü özellikler olmadan) koyduğunuzdan aynı stil adını eklemeyi unutmayın. V21 klasöründe bir stil bildirirseniz ve cihazınızın aşağıda bir sürümü varsa. Bulamaz, bu nedenle bir istisna tetiklenir.
letroll

275

Aynı sorun yaşadığım için yukarıdaki yorumlarda @MarkKeen'den cevap kopyalanıyor.

Gönderinin üst kısmında hata yazıldım ve bir uyarı iletişim kutusu ekledikten sonra oldu. Manifestte ilgili tüm stil bilgilerine sahibim. Sorunum, uyarı oluşturucudaki bir bağlam başvurusu değiştirilerek iyileştirildi - Değiştim:

new android.support.v7.app.AlertDialog.Builder(getApplicationContext())

için:

new android.support.v7.app.AlertDialog.Builder(this)

Ve daha fazla sorun yok.


5
Benimle de oldu. Sadece deniyordum ve cevabınız gerçekten işe yaradı! Çalışması için mantık nedir? Gerçekten anlamadım.
kirtan403

6
Veya, AlertDialog'unuzu doğrudan bir Aktivite yerine bir parçayla oluşturuyorsanız, yukarıda önerilenden getActivity()ziyade kullanın thisve sorun giderildi. Neden gelince, ben sadece eski AlertDialog.Builder (xxx) kodu ya farklı bir tür geçti istedim ya da sadece ne geçirilir hakkında daha az seçici iken, mevcut Builder () gerçekten, bir Etkinlik istiyor, tahmin edebilirsiniz. Google, eski kodun belgelerini gizlemeyi (kaldırmayı?) Seçtiği için, muhtemelen v7.app sürümünün kullanımını teşvik etmek için, kesin olarak söyleyecek bir yolum yok.
Anne Gunn

Önerilenlerin tersini yaptı. Ve işe yaradı: S. Teşekkürler!
Harisewak

1
Bu, aynı zamanda kullanmak istiyorsunuz benim için program çözmek getContext()yerine thisbir ArrayAdapter veya benzeri adaptör sınıf içinde iseniz.
Ibrahim.H

1
Bu şimdiye kadar karşılaştığım gerçek çözüm. İPUCU: Lütfen getApplicationContext () ve bu amaçtaki farkı belirtin.
prazeev

109

min sdk 10'dur ActionBar. api düzey 11'den edinilebilir. Yani 10 AppCompatiçin kullanmanız gereken Theme.AppCompatya da altını kullanmanız gereken destek kitaplığından yararlanacaksınız .

kullanım

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

Veya üstte işlem çubuğu istemiyorsanız

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

Daha fazla bilgi @

http://developer.android.com/guide/topics/ui/actionbar.html

Düzenle:

Ben op yazı yanlış okudum.

Op, Etkinlik Temalı bir İletişim Kutusu istiyor gibi görünüyor. Yani Bobbake4 tarafından önerildiği gibi Activityyerine uzatın ActionBarActivity.

Ayrıca aşağıdaki bağlantıya bir göz atın @ İletişim Kutusu Nitelikleri

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.4_r1/frameworks/base/core/res/res/values/themes.xml/


Önerin için teşekkürler. Bunu zaten denedim. Aynı problemi yaşadım. Stillerim dosyası şöyle görünüyor: <style name = "AppTheme" parent = "Theme.AppCompat">
ant2009

@ ant2009 yapmayacaksın. Etkinliğiniz için AppCompat destek kitaplığından bir tema kullanın
AppCompat

Bu temayı doğru ekleyip eklemediğimden emin değilim. Ancak, aşağıdaki içe aktarma ifadesini eklemek istiyor musunuz? android.support.v7.appcompat dosyasını içe aktarın. *; Ancak, bunu denedim ve hala aynı istisna ile sonuçlanmış gibi belki de yanılıyorum.
ant2009

@ ant2009 özel bir diyalogunuz olabilir. Ancak tam ekran iletişim kutusu açmak istiyor musunuz?
Raghunandan

Tam ekran olmasını istemedim. Sadece bir iletişim kutusu. Ancak, sorun şimdi çözüldü. Bobbake4 doğru yaptı. Yine de çaba için teşekkürler, yararlı tavsiyeler verdin. Ancak, hala tüm bu destek kitaplığı ve AppCompat ile kafam karıştı.
ant2009

99

Uygulama bağlamını kullanıyorsanız, şöyle:

final AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());

bunu aşağıdaki gibi bir etkinlik bağlamıyla değiştirin:

final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);

LayoutInflater.from (<aplication context>) kullanıyorsanız da, aynı temayı miras alacak şekilde etkinlik bağlamını veya sağlanan LayoutInflater'ı kullandığınızdan emin olun.
lbarbosa

1
Çözümün benim durumumda bana yardımcı oldu. GetApplicationContext () ve MainActivity.this arasındaki farkı açıklayabilir misiniz?
kostyabakay


9
görüntülemek için bir içeriğe değil, bir etkinliğe ihtiyacınız var
17'de

bu çözüm çözer
Mohamed Amin

45

Temam bir AppCompatTema ve Etkinliğim bir AppCompatActivity(veya Activitybaşkalarının cevaplarında önerildiği gibi) olmasına rağmen bu sorunu yaşıyordum. Bu yüzden projeyi temizledim, yeniden inşa ettim ve yeniden çalıştırdım.

( Derleme -> Projeyi Temizle; Derleme -> Projeyi Yeniden Oluştur; Çalıştır -> Çalıştır )

Aptal gibi görünebilir, ama şimdi harika çalışıyor !

Umarım yardımcı olur!


1
AppCompat etkinliğine DialogFragment ekledikten sonra tam olarak aynı mesaj vardı. Dosya, Önbellekleri Geçersiz Kıl / Yeniden Başlat bunu bir tutam içinde düzeltti.
16:18

2
Bu konudaki neredeyse tüm cevapları denedim. ama sadece bu görünüşte "aptal" cevap işe yarıyor. teşekkür ederim!
Dika

27

Bu benim için sabit olan şey: manifest'te temayı belirtmek yerine, onu onCreategenişleten her etkinlik için tanımladım ActionBarActivity:

@Override
protected void onCreate(Bundle savedInstanceState) {
    setTheme(R.style.MyAppTheme);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.my_activity_layout);
...
}

İşte MyAppThemebir torunudur Theme.AppCompatve xml'de tanımlanmıştır. Temanın super.onCreateve öğesinden önce ayarlanması gerektiğini unutmayın setContentView.


1
Robolectric, kaynağı yüklemeye çalışırken setTheme satırına NullPointerException özel durumu atıyor. Neden olduğu hakkında bir fikrin var mı?
Rhys Davis

@RhysDavis Yığın izi olmadan söylemek zor, ama belki de önce setContentView istiyor? Bu durumda bu düzeltme sizin için çalışmaz.
k29

19

Tarzlarına git ve ebeveynini koy

parent="Theme.AppCompat"

onun yerine

parent="@android:style/Theme.Holo.Light"

Bunu neden standart bir etkinlikle yapabiliriz? Android, ICS veya Honecomb ile Standart Etkinliklere eylem çubuğu koymadı mı? Minimum hedefimizi SDK ICS olarak ayarlarsak her zaman ActionBarActivity'yi kullanmak zorunda mıyız?
Andrew S


16

Benim durumumda res dizinimde hiç değerler-v21 dosyası yok. Sonra ben oluşturulan ve aşağıdaki kodları ekledi:

  <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="colorAccent">@color/colorAccent</item>
</style>

Projemi Oreo + cihazlarında çalıştırıyordum ve sadece bu benim için çalıştı.
Nishant Soni

16

İstediğiniz Etkinliğin temasını değiştirin. Bu benim için çalışıyor:

<activity
            android:name="HomeActivity"
            android:screenOrientation="landscape"
            android:theme="@style/Theme.AppCompat.Light"
            android:windowSoftInputMode="stateHidden" />

14

Etkinlik Theme.AppCompat kullanmasına rağmen Samsung cihazlarında böyle bir çökme yaşadım . Temel neden Samsung tarafındaki garip optimizasyonlarla ilgiliydi:

- 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

Benim çözümüm sadece android:launchMode="singleTask"


2
Sadece bu da koştu, ben düzeltmeyi doğrulamamış ve hatayı yeniden üretemiyorum .. ama ben sadece samsung cihazlarda vahşi bu hatayı görüyorum. çoğu da köklü gibi görünüyor, fwiw
danb

Yazının üst kısmında hata yazıldım ve bir uyarı iletişim kutusu ekledikten sonra oldu. Manifest'te tüm ilgili stil bilgileri var. Sorunum uyarı oluşturucuda bir bağlam referansı değiştirerek tedavi edildi - Değiştirdim: new android.support.v7.app.AlertDialog.Builder (getApplicationContext ()): new android.support.v7.app.AlertDialog.Builder (this ) ve başka sorun yok ...
Mark Keen

Bu optimizasyon hakkında daha fazla ayrıntı veya samsung bağlantınız var mı? Tüm aktiviteler o zaman Theme.AppCompat'ı uygulamak zorunda mı yoksa teması olmayan aktiviteler olabilir mi?
AAverin

13

Style.xml dosyasında ihtiyacınız olan ActionBarActivity'yi genişletmeniz gerekiyorsa:

<!-- Base application theme. -->
<style name="AppTheme" parent="AppTheme.Base"/>

<style name="AppTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->

Eğer android olarak uygulamanın ana tema olarak ayarlarsanız: yerine Theme.Material.Light AppTheme.Base o zaman “IllegalStateException: Bu etkinlik ile Theme.AppCompat tema (ya da soy) kullanmak gerekir” alırsınız hata.


13

Sadece yap

new AlertDialog.Builder(this)

Onun yerine

new AlertDialog.Builder(getApplicationContext())

Çalışma çözümü! Bu cevabı öğrenmek için 30 dakika. Neden yeni AlertDialog.Builder (getApplicationContext ()) kullanıyorum?
Erich García

Ne tür olması thisbeklendiğini açıklamak yardımcı olacaktır.
Blago

12

Ben de aynı sorunu vardı, ama bunu manifest koymak zaman çözüldü: android: theme = "@ style / Theme.AppCompat.

    <application
        android:allowBackup="true"
        android:icon="@drawable/icon"
        android:label="@string/app_name_test"
        android:supportsRtl="true"
        android:theme="@style/Theme.AppCompat">

        ...    

    </application>

10

Benim durumumda, Dialog'u göstermeye çalıştığımda böyle bir sorun ortaya çıktı. Sorun bağlamda, getBaseContext () kullanıyorum teorik olarak Etkinlik bağlamı döndürmesi gereken , ancak görünmüyor veya herhangi bir Tema uygulanmadan önce bağlam döndürür.

Bu yüzden getBaseContexts () yerine " this " yazdım ve şimdi beklendiği gibi çalışıyor.

        Dialog.showAlert(this, title, message,....);

getApplicaitonContext () geçiyordu, ama seninki hile yaptı
Jeeva

9

Uygulamamda <android:theme="@android:style/Theme.Dialog">iletişim kutusu göstermek için kullanılan temalı bir etkinlik yaşadım ve aynı sorun vardı

aşağıdaki gibi etkinlik kodunu değiştirerek bu hatayı çözdü:

@Override
protected void onCreate(Bundle savedInstanceState) {
    setTheme(R.style.Theme_AppCompat_Dialog); //this line i added
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_dialog);
}

2
Bu, kabul edilenin tüm karmaşıklığı ve cevabı olmadan benim için çalışan basit bir cevaptı.
Cory Trese

8

benim için ContextThemeWrapper kullanmak için bir çözüm oldu:

private FloatingActionButton getFAB() {
Context context = new android.support.v7.view.ContextThemeWrapper(getContext(), R.style.AppTheme);
FloatingActionButton fab = new FloatingActionButton(context);
return fab;}

dan Android - Nasıl programlı FAB oluşturmak için?


8

Bir uygulama veya temel bağlam değil, yeni bir Uyarı İletişim Kutusu oluştururken bir etkinlik bağlamı kullandığınızdan emin olun.


7

Ben de bu sorunu vardı ve bunu düzeltmek için ne yaptım, ve hala Holo tema kullanmak şu adımları atmak oldu:

ilk ben bu ithalat değiştirildi:

import android.support.v7.app.AppCompatActivity;

Bununla birlikte:

import android.app.Activity;

daha sonra uzantımı değiştirdim:

public class MyClass extends AppCompatActivity {//...

buna:

public class MyClass extends Activity {//...

Ayrıca bu içe aktarmayı değiştirmek zorunda kaldı:

import android.support.v7.app.AlertDialog;

bu içe aktarmaya:

import android.app.AlertDialog;

ardından tema etiketinizi etkinlik düzeyinde manifest'te kullanabilirsiniz:

android:theme="@android:style/Theme.Holo.Dialog" />

ve son olarak, (projenizde v7 appCompat kullanmak zorunda olan başka sınıflar yoksa), projenizi temizleyebilir ve yeniden oluşturabilir veya uygulama düzeyinde sınıf oluşturma dosyasındaki bu girişi silebilirsiniz:

compile 'com.android.support:appcompat-v7:23.2.1'

Projenizde v7 appCompat kullanmak zorunda olan başka sınıflarınız varsa, sadece projeyi temizleyin ve yeniden oluşturun.


6

Bu duruma geldiniz, çünkü önceki sdk sürümlerinde tema stilinizde Materyal Tasarımı'nı 21'e ActionBarActivityuygulamak AppThemeistiyorsunuz. Bu nedenle, AppTheme'inizle ilgili kendi özelleştirmenizi de önlemek istiyorsanız, sadece styles.xml (önceki) sdk 21) bu şekilde bir Uygulama Uyumluluğu teması devralabilir.

<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">

bunun için:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

6
Yaptım. Sorun hala devam ediyor. Yani daha fazlası var.
Martin

6

Tema stili üst öğenizi olarak değiştirin

 parent="Theme.AppCompat"

Bu benim için çalıştı ...


6

Bu hataya birçok çözümünüz var.

  1. Sen kullanmalıdır Aktivite veya FragmentActivity yerine ActionbarActivity veya AppCompatActivity

  2. Eğer kullanım istiyorsanız ActionbarActivity veya AppCompatActivity , içeri değiştirmelisiniz styles.xml Theme.Holo.xxxx için Theme.AppCompat.Light (eğer gerekli eklentiyi DarkActionbar )

İşlem çubuğu veya AppCompat ile ilgili gelişmiş özelliklere ihtiyacınız yoksa kullanmanıza gerek yoktur İşlem Çubuğu veya AppCompat .


6

Android manifest'te sadece aktivite temasını AppTheme olarak değiştirin ve aşağıdaki kod snippet'ini izleyin

<activity
  android:name=".MainActivity"
  android:label="@string/app_name"
  android:theme="@style/AppTheme">
</activity>

<etkinlik android: ad = ". MainActivity" android: label = "@ string / app_name" android: theme = "@ style / AppTheme"> </activity>
shikha

6

Bu, bir Parçada AlertDialog istediğinizde

            AlertDialog.Builder adb = new AlertDialog.Builder(getActivity());
            adb.setTitle("My alert Dialogue \n");
            adb.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {

                  //some code

            } });
            adb.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {

                 dialog.dismiss();

                } });
            adb.show();

6

Deneyimlerime göre sorun diyalogumu gösterdiğim bağlamdı. Bir düğmenin içinde bir AlertDialog'u bu şekilde başlatırım:

builder = new AlertDialog.Builder(getApplicationContext());

Ancak içerik doğru değildi ve hataya neden oldu. Uygulama içeriğini bu şekilde kullanarak değiştirdim:

Beyan bölümünde:

Context mContext;

onCreate yönteminde

mContext = this;

Ve son olarak nerede AlertDialog gereken kodda:

start_stop = (Button) findViewById(R.id.start_stop);
start_stop.setOnClickListener( new View.OnClickListener()
     {
                @Override
                public void onClick(View v)
                {
                    if (!is_running)
                    {
                        builder = new AlertDialog.Builder(mContext);
                        builder.setMessage("MYTEXT")
                                .setCancelable(false)
                                .setPositiveButton("SI", new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int id) {
                                    Task_Started = false;
                                    startTask();
                                    }
                                })
                                .setNegativeButton("NO",
                                        new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int id) {
                                        dialog.cancel();
                                    }
                                });
                        AlertDialog alert = builder.create();
                        alert.show();
                    }
            }
        }

Bu benim için bir çözüm.


Uygulama bağlamını başlangıçta kullandığınız şekilde kullanmamanız gerektiği konusunda haklısınız. Yaptığınız şey bunun yerine bağlam olarak bir Etkinlik kullanmaktır. Ancak bu bir Uygulama bağlamı veya bir alt sınıfı değildir. Dolayısıyla, bir Uygulama bağlamını farklı bir şekilde kullandığınızı söylemek doğru değildir.
Hod

5

Bu benim için çalıştı:

<application
           android:allowBackup="true"
           android:icon="@mipmap/ic_launcher"
           android:label="@string/app_name"
           android:theme="@style/AppTheme" >
           <activity
               android:name=".MainActivity"
               android:label="@string/app_name"
               android:theme="@style/Theme.AppCompat.NoActionBar">

               <intent-filter>
                   <action android:name="android.intent.action.MAIN" />

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

5

Kişisel Etkinlik uzanan ActionBarActivity gerektirir AppCompat.theme uygulanacak. Değişim dan ActionBarActivity için Aktivite veya FragmentActivity , bu sorunu çözecektir.

İşlem çubuğu kullanmazsanız:

android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen" 

5

Aynı sorunu alıyordum. Çünkü özel navigasyon çekmecesi oluşturuyordum. Ama manifestimde böyle bir temadan bahsetmeyi unutuyorum

android:theme="@style/Theme.AppCompat.NoActionBar"

En kısa sürede yukarıdaki temayı manifestime eklediğimde sorunu çözdüm.


4

Hızlı çözüm.

Temel tema üst öğenizi styles.xml dosyasında değiştirme

Şuradan değiştir:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

için

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

bana yardım etmez, istisna hala tetikler
Eugene Gr. Philippov

3

Bu çözüm benim için çalıştı.

Tasarım kitaplığı, Destek v4 ve AppCompat Destek Kitaplıklarına bağlıdır, bu nedenle sınıfta uygulama uyumu ve tasarım kitaplığı için farklı sürüm kullanmayın.

kullanım

 compile 'com.android.support:appcompat-v7:23.0.0'
 compile 'com.android.support:design:23.0.0'

onun yerine

 compile 'com.android.support:appcompat-v7:23.0.0'
 compile 'com.android.support:design:23.1.0'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.