AlertDialog de opción múltiple con adaptador personalizado

Estoy intentando crear un AlertDialog con opción de opción múltiple. He intentado con elsetMultiChoiceItems pero lo que tengo es unArrayList<Category> y no unCharSequence Así que lo intenté con el adaptador.

El problema consetAdapter Es que cuando selecciono un elemento cierra la ventana de diálogo. Y lo que quiero es seleccionar los elementos y luego presionar el botón Aceptar para ver qué elementos se seleccionaron.

AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Pick a color");
        ArrayAdapter<Category> catsAdapter = new ArrayAdapter<Category>(this, android.R.layout.select_dialog_multichoice,this.categories);
        builder.setAdapter(catsAdapter, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int item) {

            }
        });
        builder.setPositiveButton("Save", new DialogInterface.OnClickListener() {
               @Override
               public void onClick(DialogInterface dialog, int which) {
                //do something  
               }                
        });;

        AlertDialog alert = builder.create();
        alert.show();

Respuestas a la pregunta(3)

Su respuesta a la pregunta