2010-11-30 7 views
1

J'essaie d'apprendre des boîtes de dialogue personnalisées. J'en ai fait un avec un bouton et ça se passe bien et je peux frapper des points d'arrêt dans le constructeur et la méthode onCreate, mais quand je clique sur le bouton, il se bloque sans jamais arriver au gestionnaire de boutons.Boîte de dialogue d'apprentissage pour débutants Android = CRASH

Le XML de configuration dialogue (my_dialog_layout.xml) est:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 
    <Button 
    android:id="@+id/AButton" 
    android:layout_width="100px" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true" 
    android:layout_marginLeft="10px" 
    android:onClick="AButtonHandler" 
    android:text="Click Me" 
    /> 
    <TextView android:id="@+id/text" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:layout_toLeftOf="@id/AButton" 
    android:text="Click this button: " 
    /> 
    /> 

... et le fichier java de la boîte de dialogue est:

import android.os.Bundle; 
import android.widget.Toast; 
import android.view.View; 
import android.content.Context; 
import android.app.Dialog; 

public class MyDialog extends Dialog { 

    public MyDialog(Context context) { 
     super(context); 
     setContentView(R.layout.my_dialog_layout); 
    } 

    public void AButtonHandler(View target) { 
     int i = 0; // just a placeholder to set a breakpoint at 
     i++;   // "     " 
//  Toast.makeText(this, "in AButtonHandler", Toast.LENGTH_LONG).show(); 
     MyDialog.this.dismiss(); 
    } 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    //  Toast.makeText(this, "Dialog onCreate", Toast.LENGTH_LONG).show(); 
    } 
} 

Lorsque je clique sur AButton il se bloque dans le débogueur avant de à mon point d'arrêt dans AButtonHandler avec " Fil [< 1> principal] (Suspendu (exception IllegalStateException))
Voir $ 1.enCliquez sur (ligne) ligne: 2059 Bouton (Affichage) .performClick() ligne: 2408
... "

Notez également le Toast commenté. Je voulais mettre Toasts dans mais le compilateur me donne: La méthode makeText (Context, CharSequence, int) dans le type Toast n'est pas applicable pour les arguments (MyDialog, String, int) Qu'est-ce que je fais mal?

Merci d'avance!

+0

Pourquoi 'MyDialog.this.dismiss()'? Vous êtes dans MyDialog, pas une classe interne. Est-ce un reste de quand vous avez utilisé un OnClickListener? – EboMike

+0

En fait oui. Je l'ai changé pour this.dismiss(). Pas que ça arrive jamais 8-) –

Répondre

3

Deuxième problème: Une boîte de dialogue n'est pas un contexte. Il a un contexte. Utilisez Toast.makeText(getContext(), ...).

Premier problème: Même chose. La méthode doit être dans l'activité, pas dans le dialogue. (Je dois dire que je ne ai jamais essayé onClick dans une boîte de dialogue vous devrez peut-être utiliser un OnClickListener traditionnel..)

Side note: noms de fonction doivent commencer par minuscules.

+0

Merci pour le conseil sur les toasts! (ça a marché) Mais je ne comprends pas la partie gestionnaire de boutons. Je ne savais pas dans Android les gestionnaires de boutons pour les boîtes de dialogue ne sont pas dans la classe de dialogue. J'ai donc déplacé AButtonHandler dans l'activité et j'ai eu le même crash. Dans View $ 1 (que je suppose être le AButton parce que idText dit "avec id'AButton" ") l'erreur est NoSuchMethodEcxeption. Est-ce que cela signifie que je ne peux pas faire android: onClick dans une mise en page de dialogue ?? –

+0

N'a jamais essayé, mais il semble que l'avoir dans la boîte de dialogue aurait effectivement fonctionné (puisque vous avez une exception différente avant). Cependant, les documents pour android: onClick disent spécifiquement "une méthode de votre contexte" - le dialogue n'est pas un contexte.Personnellement, j'utilise toujours 'OnClickListener' pour les dialogues. – EboMike

0

Après avoir fait un peu plus que je recherche a découvert ceci:

Using onClick attribute in layout xml causes a NoSuchMethodException in Android dialogs

... exactement les mêmes symptômes que je l'avais! ... donc apparemment ce que j'essaie de faire ne fonctionnera pas. C'est dommage - android: onClick - est très pratique.

Je vais donner à eBoMike le crédit de réponse à ce sujet parce qu'il m'a redressé sur le Toast et il a au moins fait allusion à la possibilité que android: onClick était discutable.

Questions connexes