Android: Utwórz wyskakujące okienko z wieloma opcjami zaznaczenia

Szukałem wokół próbując dowiedzieć się, jak utworzyć popup lub okno dialogowe, które ma 4 opcje do wyboru.

Widzę to zdjęcie na stronie dewelopera Androida:

Tutaj wpisz opis obrazka

Czy ktoś wie jak zakodować coś takiego jak ten po prawej? Nie potrzebuję żadnych ikon obok mojego tekstu, po prostu muszę być w stanie wybrać jedną z 4 opcji.

Author: enb081, 2013-05-05

4 answers

Możesz utworzyć tablicę String z opcjami, które chcesz tam pokazać, a następnie przekazać tablicę do AlertDialog.Builder za pomocą metody setItems(CharSequence[], DialogInterface.OnClickListener).

Przykład:

String[] colors = {"red", "green", "blue", "black"};

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Pick a color");
builder.setItems(colors, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        // the user clicked on colors[which]
    }
});
builder.show();

Wyjście (na Androida 4.0.3):

Wyjście

(Mapa tła nie jest uwzględniona. ;))

 293
Author: zbr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-29 12:25:05

Wyskakujące okienka to nic innego jak AlertDialog. wystarczy więc utworzyć AlertDialog, następnie napompować żądany widok za pomocą LayoutInflater i ustawić napompowany Widok za pomocą setView() metody AlertDialog

 6
Author: Vishal Pawale,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-05 22:06:49

Spróbuj tego:

public void onClick(View v) {

    final String[] fonts = {
        "Small", "Medium", "Large", "Huge"
    };

    AlertDialog.Builder builder = new AlertDialog.Builder(TopicDetails.this);
    builder.setTitle("Select a text size");
    builder.setItems(fonts, new DialogInterface.OnClickListener() {@
        Override
        public void onClick(DialogInterface dialog, int which) {
            if ("Small".equals(fonts[which])) {
                Toast.makeText(TopicDetails.this, "you nailed it", Toast.LENGTH_SHORT).show();
            } else if ("Medium".equals(fonts[which])) {
                Toast.makeText(TopicDetails.this, "you cracked it", Toast.LENGTH_SHORT).show();
            } else if ("Large".equals(fonts[which])) {
                Toast.makeText(TopicDetails.this, "you hacked it", Toast.LENGTH_SHORT).show();
            } else if ("Huge".equals(fonts[which])) {
                Toast.makeText(TopicDetails.this, "you digged it", Toast.LENGTH_SHORT).show();
            }
            // the user clicked on colors[which]

        }
    });
    builder.show();
}
 6
Author: Nikhil jassal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-02-18 17:53:23

OPCJA ALTERNATYWNA

To mój pierwszy post, więc cieszę się, że mogę udostępnić mój kod! To mi się udało:

Umieść te dwie linie powyżej zdarzenia OnCreate

final String[] Options = {"Red", "Blue"};
AlertDialog.Builder window;

Umieść ten kod na zdarzeniu, które spowoduje to

window = new AlertDialog.Builder(this);
window.setTitle("Pick a color");
window.setItems(Options, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        if(which == 0){
           //first option clicked, do this...

        }else if(which == 1){
           //second option clicked, do this...

        }else{
        //theres an error in what was selected
            Toast.makeText(getApplicationContext(), "Hmmm I messed up. I detected that you clicked on : " + which + "?", Toast.LENGTH_LONG).show();
        }
    }
});

window.show();
 3
Author: Bart _,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-03-07 17:16:19