2010-03-12 2 views
1

J'essaie d'obtenir la valeur d'un EditText dans une boîte de dialogue. A la ligne "*" 'ed dans le code suivant, le safeNameEditText est null; Je suppose que le 'findVeiwById' recherche dans le contexte de 'AlertDialog.OnClickListener'; Comment puis-je obtenir/modifier le contexte de cet appel 'findViewById'?Android modifier le contexte pour findViewById à super de la classe en ligne

protected Dialog onCreateDialog(int id) { 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 

    switch(id){ 
    case DIALOG_NEW_SAFE: 
    builder.setTitle(R.string.news_safe); 
    builder.setIcon(android.R.drawable.ic_menu_add); 

    LayoutInflater factory = LayoutInflater.from(this); 
    View newSafeView = factory.inflate(R.layout.newsafe, null); 

    builder.setView(newSafeView); 
    builder.setPositiveButton(R.string.ok, new AlertDialog.OnClickListener(){ 
    public void onClick(DialogInterface dialog, int which) { 
*  EditText safeNameEditText = (EditText) findViewById(R.id.new_safe_name); 
     String safeName = safeNameEditText.getText().toString(); 
     Log.i(LOG, safeName); 
     setSafeDao(safeName); 
    }  
    }); 

    builder.setNegativeButton(R.string.cancel, new AlertDialog.OnClickListener(){ 
    public void onClick(DialogInterface dialog, int which) { 
     dialog.dismiss(); 
    } 
    }); 
    return(builder.create()); 
    default: 
    return(null); 
    } 
} 

Répondre

3

Je pense que vous avez besoin de faire référence à la vue, depuis la boîte de dialogue ne pas voir ce champ edittext:

EditText safeNameEditText = (EditText) nouveauSafeView.findViewById (R.id_new_safe_name);

0

Pas vraiment la réponse à votre question, mais cela vous aidera à réaliser ce que vous essayez de faire ...

final EditText safeNameEditText = (EditText) findViewById(R.id.new_safe_name); 
builder.setPositiveButton(R.string.ok, new AlertDialog.OnClickListener(){ 
public void onClick(DialogInterface dialog, int which) { 
    String safeName = safeNameEditText.getText().toString(); 
    Log.i(LOG, safeName); 
    setSafeDao(safeName); 
}  
}); 
+0

merci, je pensais que peut obtenir réellement l'EditText, mais safeNameEditText est toujours nulle. aucune idée pourquoi ... dois-je faire quelque chose de spécial pour trouver une vue si elle fait partie d'un dialogue? – wuntee

+0

La propriété findViewById utilise la vue actuellement définie pour l'activité. Si l'ID n'est pas présent dans cette vue, il renverra null. – Prashast

Questions connexes