2010-10-27 20 views
1

J'utilise ArrayAdapter pour remplir un ListView. Après la sélection et l'élément, il affiche une boîte de dialogue de confirmation Y/N. Si le choix de l'utilisateur est négatif, il devrait être en mesure de sélectionner un autre élément affichant le même dialogue. Etc.Android: onItemClick ne renvoie que l'élément sélectionné en premier

Voici mon code:

lView.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(final AdapterView<?> parent, final View v, final int index, final long id) { 


     Toast.makeText("Selected file"+ mFiles.get(index).getfileName(), 
     Toast.LENGTH_SHORT).show(); 


     SelectedFile = mFiles.get(index); 



      showDialog(DIALOG_CONFIRMIMPORT_ID); 
     } 
    }); 

La chose étrange est que si le « Toast » montre l'élément clicked à chaque fois, seul le premier élément sélectionné depuis l'activité est initiée est passé à « SelectedFile ». Quel que soit le nombre de fois où vous cliquez sur un élément différent, "SelectedFile" suppose toujours la même valeur, la valeur du premier élément cliqué, en dehors de ce code.

Heres mon code de dialogue:

Protected Dialog onCreateDialog(int id) { 
switch(id) { 
case DIALOG_CONFIRMIMPORT_ID: 
    { 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    String message = String.format(getString(R.string.importstudentfileconfirm),SelectedFile.getfileName()); 

    builder.setMessage(message) 
    .setCancelable(false) 
    .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int id) { 
    //  Activity.this.finish(); 
    //  startActivity(new Intent(Activity.this, LOL.class)); 
    } 
    }) 
.setNegativeButton(R.string.no, new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int id) { 
SelectedFile = null; 
dismissDialog(DIALOG_CONFIRMIMPORT_ID); 
mFiles.notifyAll(); 
} 
}); 

AlertDialog alert = builder.create(); 
return alert; 
} 
} 
    return null; 
} 

Merci beaucoup pour toute aide!

Répondre

1

Je suppose que cela a quelque chose à voir avec le fait que la méthode onCreateDialog est appelée seulement la première fois que la boîte de dialogue est créée. Donc, la première fois que vous verrez la boîte de dialogue, le nom de fichier sera correct. Après l'appel de onCreateDialog, onPrepareDialog (...) est appelé. onPrepareDialog, vous permet de changer la boîte de dialogue après qu'elle a été créée, mais avant qu'elle ne s'affiche. N'oubliez pas qu'en dessous de tout, Android ne crée pas de nouvelle boîte de dialogue à chaque fois que vous voulez afficher la boîte de dialogue DIALOG_CONFIRMIMPORT_ID. Il est trop coûteux en informatique d'instancier un nouveau dialogue à chaque fois. Au lieu de cela, il le crée une fois, ce qui provoque l'appel de onCreatDialog, suivi par onPrepareDialog. À chaque fois que la boîte de dialogue est affichée, elle appelle uniquement OnPrepareDialog.

Consultez l'article suivant sur le site développeur Android. Cela explique les choses assez clairement.

http://developer.android.com/guide/topics/ui/dialogs.html#ShowingADialog

Alors essayez d'utiliser onCreateDialog juste pour l'initialisation des choses qui ne changera pas entre les indices de la boîte de dialogue, puis utilisez la méthode onPrepareDialog de mettre à jour dynamiquement le contenu de la boîte de dialogue (à savoir obtenir le nouveau nom de fichier)

À la votre!

+0

Vous avez complètement raison! Merci beaucoup pour votre réponse rapide. À votre santé! –

+0

Si cela répond à votre question, pourriez-vous accepter la réponse en cliquant sur le cadre de la case à cocher à gauche de la réponse. Merci! – plainjimbo

+0

Terminé. Pour une raison quelconque, la case à cocher ne s'affiche pas sur mon Firefox. –