Autore Topic: Unable to add window ecc.. quando istanzio una AlertDialog  (Letto 843 volte)

Offline andream1977

  • Utente normale
  • ***
  • Post: 260
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Sistema operativo:
    windows xp
Unable to add window ecc.. quando istanzio una AlertDialog
« il: 17 Settembre 2010, 17:34:02 CEST »
0
sto cercando di lanciare una  AlertDialog dentro un listener di un botton, questo è il mio codice:

Codice (Java): [Seleziona]
public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);

                ecc..
               
                Button button4 = (Button) findViewById(R.id.button4);
                button4.setText(risposta4);

                button4.setOnClickListener(buttonOnClickRispondi);
}

private final Button.OnClickListener buttonOnClickRispondi = new Button.OnClickListener() {
                public void onClick(View v) {
                        Context context = getBaseContext();
                       
                        AlertDialog alertDialog = new AlertDialog.Builder(context).create();
                        alertDialog.show();
                        ecc.
}
Quando lo eseguo ho questa eccezione


09-17 15:22:28.316: ERROR/AndroidRuntime(2859): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application

alla riga

alertDialog.show();

Il problema risiede nel come viene preso il context, ma non so in quale altro modo prenderlo datochè se scrivo "this" al posto di context, eclipse mi dice:

the constructor new AlertDialog.Builder(new View.OnClickListener(){}) is undefined
« Ultima modifica: 17 Settembre 2010, 19:23:17 CEST da JD, Reason: Usate i bbcode java e xml!! xD »

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Unable to add window ecc.. quando istanzio una AlertDialog
« Risposta #1 il: 17 Settembre 2010, 18:58:54 CEST »
0
Usa TuaActivity.this o al massimo getApplicationContext()

Offline andream1977

  • Utente normale
  • ***
  • Post: 260
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Sistema operativo:
    windows xp
Re:Unable to add window ecc.. quando istanzio una AlertDialog
« Risposta #2 il: 17 Settembre 2010, 20:00:17 CEST »
0
Ricky la soluzione TuaActivity.this non l'accetta eclipse così come non accetta this
e con getApplicationContext() ottengo lo stesso errore
android.view.WindowManager$BadTokenException

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Unable to add window ecc.. quando istanzio una AlertDialog
« Risposta #3 il: 17 Settembre 2010, 20:20:17 CEST »
+1
Ricky la soluzione TuaActivity.this non l'accetta eclipse così come non accetta this
e con getApplicationContext() ottengo lo stesso errore
android.view.WindowManager$BadTokenException

Impossibile che non accetta NomeActivity.this

Comunque, ti consiglio di usare il metodo onCreateDialog, come spiegato qui:
Creating Dialogs | Android Developers

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:Unable to add window ecc.. quando istanzio una AlertDialog
« Risposta #4 il: 17 Settembre 2010, 20:40:29 CEST »
+1
Giusto per curiosità, da DOVE stai lanciando questo Alert? una classe che estende cosa? Se estende Activity DEVE per forza funzionare TuaActivity.this (avendo cura di sostituire TuaActivity col nome della tua Activity xD).
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline andream1977

  • Utente normale
  • ***
  • Post: 260
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Sistema operativo:
    windows xp
Re:Unable to add window ecc.. quando istanzio una AlertDialog
« Risposta #5 il: 20 Settembre 2010, 12:37:43 CEST »
0

Usando NomeClasse.this funziona

volevo chiedere, che differenze c'è quando il contesto si prende da getBaseContext() piuttosto da quando si prende scrivendo NomeClasse.this

grazie

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Unable to add window ecc.. quando istanzio una AlertDialog
« Risposta #6 il: 20 Settembre 2010, 21:53:09 CEST »
+1
volevo chiedere, che differenze c'è quando il contesto si prende da getBaseContext() piuttosto da quando si prende scrivendo NomeClasse.this

Chiedilo a google:

Android - what's the difference between the various methods to get a Context? - Stack Overflow

Offline andream1977

  • Utente normale
  • ***
  • Post: 260
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Sistema operativo:
    windows xp
Re:Unable to add window ecc.. quando istanzio una AlertDialog
« Risposta #7 il: 21 Settembre 2010, 11:53:24 CEST »
0
Perfetto, grazie, dall'articolo si legge che i modi per prendere un contesto sono 3
mContext = this;    // since Activity extends Context
mContext = getApplicationContext();
mContext = getBaseContext();


Basically the Application context is associated with the Applicaiton and will always be the same throughout the life cycle of you app,
Instead the Activity context is associated with the activity and could possible be destroyed many times as the activity is destroyed during screen orientation changes and such.