2013-12-08 27 views
6

Ho implementato uno spinner nella mia app. Sto mostrando un elenco di scuole ma voglio un valore predefinito/prompt in modo che l'utente sappia selezionare una scuola. Voglio anche farlo senza dover richiedere il prompt come elemento della lista. Qualche idea?Set di spinner Android testo predefinito

Ecco il mio codice filatore finora:

selectSchoolSpinner = (Spinner) findViewById(R.id.select_school_spinner); 
spinnerSchoolList = new ArrayList<String>(); 

spinnerSchoolList.add("Please select School"); 
//I don't want to have a prompt like the latter  

ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(this, 
    android.R.layout.simple_spinner_item, spinnerSchoolList); 

spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

selectSchoolSpinner.setAdapter(spinnerAdapter); 

risposta

9

provare il metodo setSelection per impostare testo predefinito:

spinner.setSelection(adapter.getPosition(DEFAULT_CURRENCY_TYPE))

E guardate questo link: How to make an Android Spinner with initial text "Select One". È molto utile (la risposta @aaronvargas è ciò di cui hai bisogno).

+0

Grazie lavorato per me. –

17

È necessario creare ArrayAdapter personalizzato con una stringa per il testo desiderato nel relativo costruttore. Quindi, dovresti cambiare il primo elemento dell'array con il testo predefinito e, dopo che l'utente ha fatto clic sulla casella, dovrebbe tornare all'array originale.

Esempio: classe

attività: classe

public class SpinnerActivity extends Activity { 

    Spinner spinner; 
    String defaultTextForSpinner = "Your deafult text here"; 
    String[] arrayForSpinner = {"One", "Two", "Three"}; 

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

     setContentView(R.layout.activity_spinner); 

     spinner = (Spinner) findViewById(R.id.your_spinner); 
     spinner.setAdapter(new CustomSpinnerAdapter(this, R.layout.spinner_row, arrayForSpinner, defaultTextForSpinner)); 
    } 
    } 

CustomSpinnerAdapter:

public class CustomSpinnerAdapter extends ArrayAdapter<String>{ 

    Context context; 
    String[] objects; 
    String firstElement; 
    boolean isFirstTime; 

    public CustomSpinnerAdapter(Context context, int textViewResourceId, String[] objects, String defaultText) { 
     super(context, textViewResourceId, objects); 
     this.context = context; 
     this.objects = objects; 
     this.isFirstTime = true; 
     setDefaultText(defaultText); 
    } 

    @Override 
    public View getDropDownView(int position, View convertView, ViewGroup parent) { 
     if(isFirstTime) { 
      objects[0] = firstElement; 
      isFirstTime = false; 
     } 
     return getCustomView(position, convertView, parent); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     notifyDataSetChanged(); 
     return getCustomView(position, convertView, parent); 
    } 

    public void setDefaultText(String defaultText) { 
     this.firstElement = objects[0]; 
     objects[0] = defaultText; 
    } 

    public View getCustomView(int position, View convertView, ViewGroup parent) { 

     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View row = inflater.inflate(R.layout.spinner_row, parent, false); 
     TextView label = (TextView) row.findViewById(R.id.spinner_text); 
     label.setText(objects[position]); 

     return row; 
    } 

    } 
+0

Grazie, funziona perfettamente, bel lavoro !! –

+0

Ottengo un errore nel metodo getCustomView. che cos'è R.id.tremps_spinner_row e R.id.tremps_spinner_text –

+0

Controlla di nuovo la mia risposta, l'ho modificata. spinner_row è il layout per un oggetto spinner. spinner_text è il TextView all'interno del layout spinner_row –

1
 @Override 
    protected void onPostExecute(PositionBean[] result) { 
     String[] spinnerArray = new String[result.length]; 

     if(result!=null) { 

      for (int i = 0; i < result.length; i++) { 

       String positionName = result[i].getPositionName(); 
       spinnerArray[i] = result[i].getPositionName(); 

      } 
      ArrayList<String> positionList = new ArrayList<String>(Arrays.asList(spinnerArray)); 
      positionList.add(0,"select"); 
      String [] positions = positionList.toArray(new String[positionList.size()]); 

      ArrayAdapter<String> adapter = new ArrayAdapter<String>(EngineActivity.this, android.R.layout.simple_spinner_item, 
        positions); 
      adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
      positionSpinner.setAdapter(adapter); 
     }else{ 
      Log.d("NULL", "This is null"); 
     } 

    } 
+0

Un piccolo gioco con l'array ha risolto il problema, spero che questo possa aiutare qualcuno –

Problemi correlati