Come faccio a creare un Spinner Android come popup?

Vorrei ricall una window di dialogo quando l'utente tocca una voce di menu per consentire all'utente di select un elemento.

Ho bisogno di una window separata per questo o posso usare Spinner direttamente? Vedo questo collegamento, menziona un'opzione MODE_DIALOG ma non sembra essere più definita. AlertDialog può essere OK, ma tutte le opzioni dicono che "facendo clic su un elemento nell'elenco non sarà chiusa la window di dialogo" che è ciò che voglio. Qualche suggerimento?

  • Sfoglia button richiesto?
  • C'è qualche differenza tra Activityname.this () e questo?
  • Prendi uno screenshot utilizzando MediaProjection
  • L'accesso alla string del corpo di una risposta OkHttp due volte in IllegalStateException: chiuso
  • La dimensione del carattere di TextView nell'applicazione Android cambia la modifica della dimensione del carattere dalle impostazioni nativi
  • Come applicare l'evento di scambio di text su EditText
  • Idealmente, il codice sarebbe simile al caso in cui la spinner è mostrata 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 

  • API di Google Service Location ha bisogno di internet?
  • Diapositiva di stile Android di Facebook
  • Esegui un'azione con il field personalizzato del contatto
  • Iniettare codice in APK
  • Android - Simula clic su Home
  • editText non sta perdendo la messa a fuoco
  • 9 Solutions collect form web for “Come faccio a creare un Spinner Android come popup?”

    È ansible utilizzare una window 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 chiude la window di dialogo quando uno di essi viene premuto come se volesse. Spero che questo ti aiuti!

    In xml c'è l'opzione

     android:spinnerMode="dialog" 

    utilizzare questo per la modalità di dialogo

    Prova questo:

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

    Vedi questo link per ulteriori dettagli.

    MODE_DIALOG e MODE_DROPDOWN sono definiti in API 11 (Honeycomb). MODE_DIALOG descrive il comportmento abituale nelle versioni precedenti della piattaforma.

    Aggiunta di un piccolo attributo come android:spinnerMode="dialog" mostrerebbe i contenuti dello spinner in un pop-up.

    È ansible creare il proprio dialogo personalizzato. È abbastanza facile. Se si desidera OnItemClickListener con una selezione nel filatore, quindi aggiungere un OnItemClickListener e aggiungere

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

    come nel button OnClickListener per il button OK. C'è un avvertimento, però, e è che l'ascoltatore onclick non si spegne se si riseleziona l'opzione predefinita. È anche necessario il button 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 class:

    src / your / package / 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, utilizzalo come:

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

    Ecco una sottoclass Spinner che sovrascrive performClick () per mostrare una window di dialogo invece di un dropdown. Nessun XML richiesto. Provalo, dimmi 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 ulteriori informazioni, leggere questo articolo: Come effettuare le opzioni di Spinner Android in una window di dialogo

     android:spinnerMode="dialog" // Creating adapter for spinner ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, categories); // Drop down layout style - list view with radio button dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // attaching data adapter to spinner spinner.setAdapter(dataAdapter); 

    Questo è il codice sorgente Android SDK. Come si può vedere si dispone di un constructor speciale per creare uno Spinner con la modalità specificata che si desidera utilizzare.

    Spero che ti aiuterà 🙂

      /** * Construct a new spinner with the given context's theme, the supplied attribute set, * and default style. <code>mode</code> may be one of {@link #MODE_DIALOG} or * {@link #MODE_DROPDOWN} and determines how the user will select choices from the spinner. * * @param context The Context the view is running in, through which it can * access the current theme, resources, etc. * @param attrs The attributes of the XML tag that is inflating the view. * @param defStyle The default style to apply to this view. If 0, no style * will be applied (beyond what is included in the theme). This may * either be an attribute resource, whose value will be retrieved * from the current theme, or an explicit style resource. * @param mode Constant describing how the user will select choices from the spinner. * * @see #MODE_DIALOG * @see #MODE_DROPDOWN */ public Spinner(Context context, AttributeSet attrs, int defStyle, int mode) { super(context, attrs, defStyle); 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.