Pourquoi ne AlertDialog.Générateur(Context context) accepte uniquement l'Activité en tant que paramètre?

Dans mon processus d'apprentissage continu (boîtes de dialogue, cette fois), j'ai découvert que cela fonctionne:

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

Tandis que le suivant ne fonctionne pas (échec à l'exécution avec WindowManager$BadTokenException):

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

Je ne comprends pas pourquoi, parce que le constructeur pour AlertDialog.Le constructeur est défini de manière à accepter Contexte comme un paramètre, pas de l'Activité:

public AlertDialog.Générateur (Contexte
contexte)

Constructeur à l'aide d'un cadre pour ce
constructeur et l'AlertDialog il
crée.

Ce qui me manque?

  • C'est également vrai pour d'autres boîtes de dialogue. Bonne question, +1
  • J'ai découvert un autre thread traitant avec un problème similaire, mais aucune explication n': stackoverflow.com/questions/3968170/...
  • Ma conjecture est que le Constructeur n'est pas simplement demander pour une Activité, car elle permettrait d'empêcher à l'avenir de l'API d'avoir d'autres types de contextes qui peuvent afficher une boîte de dialogue.
  • bonne idée, à l'exception de son pas juste à l'avenir, son maintenant. AlertDialog.Générateur peut être utilisé par ListActivity, Service, ... et tout l'héritage de Contexte exactement parce que son argument est pour un résumé de Contexte.
  • en fait, vous ne pouvez pas afficher les boîtes de dialogue directement à partir des classes héritant de Context autres que Activity. mail-archive.com/[email protected]/...
  • ahh je me rends compte que je ne l'ai fait avec de l'Activité et de ses sous-classes, et il n'est pas judicieux de l'utiliser à partir d'un Service fait. En tout cas, j'ai fait le travail de la mine en passant l'activité dans les mêmes classes que d'un arg.
  • Curieusement, Google fournit un exemple qui indique que vous pouvez utiliser getcontexteapplication(). Au bas de cette page (developer.android.com/guide/topics/ui/dialogs.html) ils fournissent une AlertDialog exemple qui inclut ceci: Contexte mContext = getcontexteapplication(); ... builder = new AlertDialog.Générateur(mContext); Techniquement, il NE me permettre de faire cela, mais mon application explose lorsque j'essaye d'afficher la boîte de dialogue. Hmmm...

InformationsquelleAutor an00b | 2011-03-25