2013-12-08 22 views
6

Ich habe einen Spinner in meine App implementiert. Ich zeige eine Liste von Schulen, aber ich möchte einen Standardwert/eine Eingabeaufforderung, damit der Benutzer eine Schule auswählen kann. Ich möchte dies auch tun, ohne die Aufforderung als Listenelement zu haben. Irgendwelche Ideen?Android Spinner Set Standardtext

Hier ist mein Spinner Code so weit:

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); 

Antwort

9

Try setSelection Methode Standardtext zu setzen:

spinner.setSelection(adapter.getPosition(DEFAULT_CURRENCY_TYPE))

Und schauen Sie auf diesen Link: How to make an Android Spinner with initial text "Select One". Es ist sehr nützlich (@Aaronvargas Antwort ist was Sie brauchen).

+0

Danke für mich gearbeitet. –

17

Sie sollten benutzerdefinierte ArrayAdapter mit einem String für den gewünschten Text in seinem Konstruktor erstellen. Dann sollten Sie das erste Element Ihres Arrays mit Ihrem Standardtext wechseln, und nachdem der Benutzer auf den Spinner geklickt hat, sollte er zurück zum ursprünglichen Array wechseln.

Beispiel:

Aktivitätsklasse:

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 Klasse:

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

Danke, es funktioniert perfekt, gute Arbeit !! –

+0

Ich bekomme einen Fehler bei getCustomView-Methode. Was ist R.id.tremps_spinner_row und R.id.tremps_spinner_text –

+0

Überprüfen Sie meine Antwort noch einmal, ich habe es bearbeitet. Spinner_row ist das Layout für einen Spinner-Artikel. Spinner_text ist der TextView innerhalb Spinner_row Layout –

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

Ein kleines Spiel mit dem Array repariert das Problem, ich hoffe, das wird jemandem helfen –