¿Hay alguna manera de convertir una casilla de verificación múltiple en una casilla que pueda tener solo una casilla marcada a la vez?

Así que aquí hay algo que estoy tratando de resolver, con cuadro de diálogo de alerta y opción única: multicoice.

public class MainActivity extends Activity {

    CharSequence[] items = {"FIT", "Fakultet za menadzment", "Fakultet digitalnih umetnosti"};
    private String selectedItem;
    public int proba;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }

    private void launchWebPage(String url){
        Intent i = new Intent(Intent.ACTION_VIEW);
        i.setData(Uri.parse(url));
        startActivity(i);
    }

    public void dialog(View v){
        showDialog(0);
    }

    public void dialog1(View v){
        Toast.makeText(getBaseContext(), "Nema deklarisanu funkciju.", Toast.LENGTH_LONG).show();
    }

    public void dialog2(View v){
        Toast.makeText(getBaseContext(), "Nema deklarisanu funkciju.", Toast.LENGTH_LONG).show();
    }


    public Dialog onCreateDialog(final int id) {

                final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                builder.setTitle("Odabir");
                builder.setSingleChoiceItems(items, 1, new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialogInterface, int i) {

                                selectedItem = (String) items[i];
                                proba = i;


                            }
                        });
                        builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int position) {

                                Toast.makeText(getBaseContext(), "Test", Toast.LENGTH_SHORT).show();

                            }
                        });
                builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        Toast.makeText(getBaseContext(), "Cancel pritisnuto!", Toast.LENGTH_SHORT).show();
                    }
                });

                builder.show();

        return null;
    }
}
0
Beansolder 26 dic. 2016 a las 04:03

3 respuestas

La mejor respuesta

Debe usar un radioButon no un checkbox.

https://developer.android.com/guide/topics/ui/controls/radiobutton.html

2
mattfred 26 dic. 2016 a las 01:05

Use una de las variedades de setSingleChoiceItems() en AlertDialog.Builder. A pesar de lo que dice la documentación, esto debería usar botones de radio, no casillas de verificación.

2
CommonsWare 26 dic. 2016 a las 01:09

Finalmente lo descubrí, si alguien necesita algo similar a esto, este es el código que falta.

public Dialog onCreateDialog(final int id) {

            final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
            builder.setTitle("Odabir");
            builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {

                            selectedItem = (String) items[i];
                            proba = i;

                        }
                    });
                    builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int position) {

                            ListView lw = ((AlertDialog) dialog).getListView();
                            Object checkedItem = lw.getAdapter().getItem(lw.getCheckedItemPosition());
                            Toast.makeText(getApplicationContext(), ((String) checkedItem), Toast.LENGTH_SHORT).show();

                            if(proba == 0){
                                launchWebPage("http://www.metropolitan.ac.rs/osnovne-studije/fakultet-informacionih-tehnologija/");
                            } else if(proba == 1){
                                launchWebPage("http://www.metropolitan.ac.rs/osnovne-studije/fakultet-za-menadzment/");
                            } else {
                                launchWebPage("http://www.metropolitan.ac.rs/fakultet-digitalnih-umetnosti-2/");
                            }

                        }
                    });
            builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    Toast.makeText(getBaseContext(), "Cancel pritisnuto!", Toast.LENGTH_SHORT).show();
                }
            });

            builder.show();

    return null;
}
0
Beansolder 26 dic. 2016 a las 02:57