Question

Dans mon application, je afficher un menu contextuel sur clic long dans un ListActivity. L'une des options « priorité » saute vers le haut un AlertDialog avec 3 choix de boutons radio. Le problème est, il affiche une boîte de dialogue vide sans mes 3 choix, ou le message que je mets. Voici mon code ..

protected Dialog onCreateDialog(int id) {
    AlertDialog dialog;
    switch(id) {
    case DIALOG_SAB_PRIORITY_ID:
        final CharSequence[] items = {"High", "Normal", "Low"};

        AlertDialog.Builder builder = new AlertDialog.Builder(SabMgmt.this);
        builder.setMessage("Select new priority")
               .setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int item) {
                Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
            }
        });

        dialog = builder.create();            
        break;
    default:
        dialog = null;
    }
    return dialog;
}

Si je remplace les .setSingleChoiceItems avec un effet positif et négatif bouton à la place, il affiche les boutons et le message comme prévu. Qu'est-ce que je fais mal à mettre en place ma liste de boutons radio? Voici mon code d'appel ainsi ..

public boolean onContextItemSelected(MenuItem item) {
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
    switch (item.getItemId()) {
    case R.id.sabdelete:
        // Correct position (-1) for 1 header
        final SabQueueItem qItem = (SabQueueItem) itla.getItem(info.position-1);
        SabNZBdUtils.deleteItem(qItem.getNzo_id());
        getQueue();
        ListView lv = getListView();
        View v = lv.findViewById(R.id.sablistheader);
        setHeader(v);
        itla.notifyDataSetChanged();
        return true;
    case R.id.sabpriority:
        showDialog(DIALOG_SAB_PRIORITY_ID);
        return true;
    default:
        return super.onContextItemSelected(item);
    }
}
Était-ce utile?

La solution

figured it out! J'utilisais builder.setMessage sur un dialogue singleChoiceItem au lieu de builder.setTitle. Il semble que les boîtes de dialogue à l'aide des choix de boutons radio ne prennent pas en charge la fixation d'un message, seulement un titre. Il semble étrange que la méthode est fournie si. Quoi qu'il en soit, voici le code de travail ..

protected Dialog onCreateDialog(int id) {
    AlertDialog dialog;
    switch(id) {
    case DIALOG_SAB_PRIORITY_ID:
        final CharSequence[] items = {"High", "Normal", "Low"};

        AlertDialog.Builder builder = new AlertDialog.Builder(SabMgmt.this);
        builder.setTitle("Select new priority")
               .setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int item) {
                Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
            }
        });

        dialog = builder.create();  
        break;
    default:
        dialog = null;
    }
    return dialog;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top