2010-09-09 8 views
1

Je reçois une exception NullPointerException lors de la tentative de création d'un Spinner dans une boîte de dialogue et je n'arrive pas à la déboguer car le code semble solide. Je me demande si quelqu'un d'autre a une idée. Toute aide est grandement appréciée.Définir spinner dans la boîte de dialogue personnalisée

protected Dialog onCreateDialog(int id) 
    { 
     Dialog dialog; 
     switch(id) { 
     case DIALOG_SEND_PM: 
      Spinner spinner = (Spinner)findViewById(R.id.pm_server); 
      ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.server_array, android.R.layout.simple_spinner_item); 
      adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
      spinner.setAdapter(adapter); 
      spinner.setOnItemSelectedListener(new MyOnItemSelectedListener()); 

      dialog = new Dialog(PM.this); 
      dialog.setContentView(R.layout.send_pm_dialog); 
      dialog.setTitle(R.string.send_pm); 
      pmMessage = (EditText) dialog.findViewById(R.id.send_pm_box); 
      Button sendPm = (Button) dialog.findViewById(R.id.send_pm_button); 
      sendPm.setOnClickListener(PM.this); 
      break; 
     default: 
      dialog = null; 
    } 

je reçois l'exception à adapter.setDropDownViewResource (android.R.layout.simple_spinner_dropdown_item); J'ai changé le contexte en MyClass.this et l'exception est passée à la ligne suivante, ce qui me rend confus. Je me demande si c'est l'adaptateur qui a une valeur nulle, mais j'appelle tout de la même manière que je l'ai fait auparavant alors qu'il n'était pas dans une boîte de dialogue.

données XML pertinentes:

<LinearLayout> 
    <TextView/> 

    <LinearLayout> 

     <TextView/> 
     <EditText/> 
     <TextView/> 
     <Spinner 
     android:id="@+id/pm_server" 
     android:layout_height="fill_parent" 
     android:layout_width="wrap_content" 
     android:background="@drawable/yblueborder" 
     android:textColor="#ABABAB"/> 
    </LinearLayout> 

    <Button/> 
</LinearLayout> 

Edité le reste des données de sorte qu'il ne prendrait pas trop de place.

+0

Votre spinner est-il défini dans la disposition de votre activité ou dans la disposition de la boîte de dialogue? – Brian

+0

défini dans la présentation du dialogue. Je posterai le XML. –

Répondre

11

J'ai réussi à résoudre le problème. C'était très subtil et je suis sûr que j'ai eu de la chance. Voici le code de travail:

protected Dialog onCreateDialog(int id) 
    { 
     Dialog dialog; 
     switch(id) { 
     case DIALOG_SEND_PM: 
      dialog = new Dialog(PM.this); 
      dialog.setContentView(R.layout.send_pm_dialog); 
      dialog.setTitle(R.string.send_pm); 
      pmMessage = (EditText) dialog.findViewById(R.id.send_pm_box); 
      Button sendPm = (Button) dialog.findViewById(R.id.send_pm_button); 
      sendPm.setOnClickListener(PM.this); 

      Spinner spinner = (Spinner)dialog.findViewById(R.id.pm_server); 
      ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.server_array, android.R.layout.simple_spinner_item); 
      adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
      spinner.setAdapter(adapter); 
      spinner.setOnItemSelectedListener(new MyOnItemSelectedListener()); 
      break; 
     default: 
      dialog = null; 
     } 
     return dialog; 
    } 

je me suis déplacé une partie du code autour de sorte que la boîte de dialogue a été initialisé avant la fileuse, mais ce ne fut pas le problème. J'ai ajouté un dialogue. dans Spinner spinner = (Spinner) dialog.findViewById (R.id.pm_server); et cela a fait l'affaire. J'espère que cela aide les autres.

+1

Ouais, il est facile d'oublier d'appeler dialog.findViewById() plutôt que de simplement trouver ViewById(). Je me grattais la tête jusqu'à ce que je regarde de près votre réponse. Merci! – DaveGauer

+1

Merci frère ..... Restez béni :-) –

+0

onCreateDialog (int id) est obsolète ... –

Questions connexes