Domanda Come posso creare uno spinner Android come popup?


Voglio aprire una finestra di selezione quando l'utente tocca una voce di menu per consentire all'utente di selezionare un elemento.

Ho bisogno di una finestra di dialogo separata per questo o posso usare direttamente Spinner? io vedo questo link, menziona un'opzione MODE_DIALOG ma non sembra più essere definita. AlertDialog può essere OK ma tutte le opzioni dicono "facendo clic su un elemento nell'elenco non si chiude la finestra di dialogo", che è quello che voglio. Qualche suggerimento?

Idealmente, il codice sarebbe simile al caso in cui lo spinner è mostrato sullo schermo:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(activity,
     android.R.layout.simple_spinner_item, items);              
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
myspinner.setAdapter(adapter);  
// myspinner.showAsDialog() <-- what i want             

41
2018-06-09 00:32


origine


risposte:


Puoi usare una finestra di avviso

    AlertDialog.Builder b = new Builder(this);
    b.setTitle("Example");
    String[] types = {"By Zip", "By Category"};
    b.setItems(types, new OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {

            dialog.dismiss();
            switch(which){
            case 0:
                onZipRequested();
                break;
            case 1:
                onCategoryRequested();
                break;
            }
        }

    });

    b.show();

Questo chiuderà la finestra di dialogo quando uno di essi viene premuto come vuoi. Spero che questo ti aiuti!


100
2018-06-09 04:17



In xml c'è un'opzione

android:spinnerMode="dialog"

usa questo per Modalità di dialogo


52
2017-07-29 11:53



Prova questo:

Spinner popupSpinner = new Spinner(context, Spinner.MODE_DIALOG);

Guarda questo collegamento per ulteriori dettagli.


14
2017-07-15 08:23



MODE_DIALOG e MODE_DROPDOWN sono definiti nell'API 11 (Honeycomb). MODE_DIALOG descrive il comportamento abituale nelle precedenti versioni della piattaforma.


10
2018-06-09 00:37



Aggiungere un piccolo attributo come android:spinnerMode="dialog" mostrerebbe il contenuto dello spinner in un pop-up.


9
2017-08-27 12:53



Puoi creare la tua finestra di dialogo personalizzata. È abbastanza facile. Se si desidera eliminarlo con una selezione nella casella di selezione, quindi aggiungere un OnItemClickListener e aggiungi

int n = mSpinner.getSelectedItemPosition();
mReadyListener.ready(n);
SpinnerDialog.this.dismiss();

come in OnClickListener per il pulsante OK. C'è un avvertimento, però, ed è che il listener onclick non si attiva se si riseleziona l'opzione predefinita. Hai bisogno anche del pulsante OK.

Inizia con il layout:

res / layout / spinner_dialog.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content" 
  android:layout_height="wrap_content">
<TextView 
    android:id="@+id/dialog_label" 
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent"
    android:hint="Please select an option" 
    />
<Spinner
    android:id="@+id/dialog_spinner" 
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent"
    />
<Button
    android:id="@+id/dialogOK" 
    android:layout_width="120dp"
    android:layout_height="wrap_content" 
    android:text="OK"
    android:layout_below="@id/dialog_spinner"
    />
<Button
    android:id="@+id/dialogCancel" 
    android:layout_width="120dp"
    android:layout_height="wrap_content" 
    android:text="Cancel"
    android:layout_below="@id/dialog_spinner"
    android:layout_toRightOf="@id/dialogOK"
    />
</RelativeLayout>

Quindi, crea la classe:

src / vostro / pacchetto / SpinnerDialog.java:

public class SpinnerDialog extends Dialog {
    private ArrayList<String> mList;
    private Context mContext;
    private Spinner mSpinner;

   public interface DialogListener {
        public void ready(int n);
        public void cancelled();
    }

    private DialogListener mReadyListener;

    public SpinnerDialog(Context context, ArrayList<String> list, DialogListener readyListener) {
        super(context);
        mReadyListener = readyListener;
        mContext = context;
        mList = new ArrayList<String>();
        mList = list;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.spinner_dialog);
        mSpinner = (Spinner) findViewById (R.id.dialog_spinner);
        ArrayAdapter<String> adapter = new ArrayAdapter<String> (mContext, android.R.layout.simple_spinner_dropdown_item, mList);
        mSpinner.setAdapter(adapter);

        Button buttonOK = (Button) findViewById(R.id.dialogOK);
        Button buttonCancel = (Button) findViewById(R.id.dialogCancel);
        buttonOK.setOnClickListener(new android.view.View.OnClickListener(){
            public void onClick(View v) {
                int n = mSpinner.getSelectedItemPosition();
                mReadyListener.ready(n);
                SpinnerDialog.this.dismiss();
            }
        });
        buttonCancel.setOnClickListener(new android.view.View.OnClickListener(){
            public void onClick(View v) {
                mReadyListener.cancelled();
                SpinnerDialog.this.dismiss();
            }
        });
    }
}

Infine, usalo come:

mSpinnerDialog = new SpinnerDialog(this, mTimers, new SpinnerDialog.DialogListener() {
  public void cancelled() {
    // do your code here
  }
  public void ready(int n) {
    // do your code here
  }
});

6
2018-06-09 02:07



Ecco una sottoclasse Spinner che sovrascrive performClick () per mostrare una finestra di dialogo invece di un menu a discesa. Nessun XML richiesto. Fai un tentativo, fammi sapere se funziona per te.

public class DialogSpinner extends Spinner {
    public DialogSpinner(Context context) {
        super(context);
    }

    @Override 
    public boolean performClick() {
        new AlertDialog.Builder(getContext()).setAdapter((ListAdapter) getAdapter(), 
            new DialogInterface.OnClickListener() {
                @Override public void onClick(DialogInterface dialog, int which) {
                    setSelection(which);
                    dialog.dismiss();
                }
            }).create().show();
        return true;
    }
}

Per maggiori informazioni leggi questo articolo: Come rendere le opzioni di Android Spinner Popup in una finestra di dialogo


2
2018-05-28 12:20