2010-09-15 9 views
1

Très bien, je voudrais donc avoir une boîte de dialogue personnalisée, mais je n'arrive pas à comprendre pour la vie de moi comment la faire apparaître lorsque la fonction est appelée.Affichage de la boîte de dialogue personnalisée

public void addHomework() { 
    final Dialog alert = new Dialog(this); 

    alert.setTitle("Add Homework"); 

    alert.setContentView(R.layout.homework_item_entry); 

    Button add_button = (Button) findViewById(R.id.add_homework_button); 
    Button cancel_button = (Button) findViewById(R.id.cancel_homework_button); 

    add_button.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      Toast.makeText(ClassHomeworkList.this, "Adding homework", Toast.LENGTH_SHORT).show(); 
     } 
    }); 

    cancel_button.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      alert.dismiss(); 
     } 
    }); 

    alert.show(); 
} 

Que pouvais-je faire?

+0

Que se passe-t-il maintenant? –

+0

Rien du tout, rien ne se montre. – Chiggins

+0

vous devriez vraiment utiliser onCreateDialog à la place, il aide à gérer des choses comme la reprise lorsque l'écran est tourné. Juste fondamentalement déplacer votre code de constructeur là et ensuite retourner la boîte de dialogue, il gère le reste. – schwiz

Répondre

1

Je pense que vous avez le problème que vos deux boutons ne peuvent pas être trouvés par leurs années ID comme celui-ci (comme vous essayez de les trouver dans votre activité principale, mais ils sont dans la mise en page pour la boîte de dialogue)

Button add_button = (Button) findViewById(R.id.add_homework_button); 
Button cancel_button = (Button) findViewById(R.id.cancel_homework_button); 

Mais au lieu devez faire:

Button add_button = (Button) alert.findViewById(R.id.add_homework_button); 
Button cancel_button = (Button) alert.findViewById(R.id.cancel_homework_button); 
0
LayoutInflater factory = LayoutInflater.from(this); 
View view = factory.inflate(R.layout.dialog, null); 

//the id is your root layout 
LinearLayout layout = (LinearLayout) view.findViewById(R.id.layout); 
alert.setContentView(layout); 
4

Je sais que c'est un vieux fil, mais même après avoir lu les docs Android, il n'a pas non plus évident pour moi comment afficher une boîte de dialogue personnalisée en utilisant la classe Dialog standard. Fondamentalement vous pouvez appeler:

this.showDialog(MANAGE_PASSWORD); // MANAGE_PASSWORD static final int 

de votre activité. Ensuite instancier la boîte de dialogue personnalisée dans la méthode onCreateDialog:

protected Dialog onCreateDialog(int id) { 
     Dialog dialog; 
     switch(id) { 
     case MANAGE_PASSWORD: 
      dialog= getInstancePasswordDialog(); 
      break; 
     case DIALOG_ABOUT: 
      // do the work to define the About Dialog 
      dialog= getInstanceAlertDialog(); // called "the first time" 
      break; 
     default: 
      dialog = null; 
     } 
     return dialog; 
    } 

Le code pour instancier la boîte de dialogue est en getInstancePasswordDialog(). Voici le code sample.

Questions connexes