2017-04-25 2 views
0

Je souhaite utiliser spinner comme "Sélectionner la ville". J'ai défini une valeur pour select_city dans l'utilisation de disposition de chaîne dans la disposition android:prompt="@string/select_city" mais cela n'a pas fonctionné. Également essayé d'utiliser sp_city.setPrompt("Select City"); ne fonctionnait pas non plus.Spinner invite ne s'affiche pas

Quel est mon problème? Comment puis-je le réparer et définir l'invite?

Mise en page:

<Spinner 
    android:id="@+id/spinner_poi_city" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@android:drawable/btn_dropdown" 
    android:spinnerMode="dropdown"/> 

Classe:

public class FirstPOIPreference extends DialogPreference { 

    private Spinner sp_city; 
    private ArrayAdapter<String> adapter; 
    private POI poiDialog = new POI(); 

    public FirstPOIPreference(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(); 
    } 

    private void init() { 
     setPersistent(false); 
     setDialogLayoutResource(R.layout.pref_poi_dialog); 
     setPositiveButtonText(android.R.string.ok); 
     setNegativeButtonText(android.R.string.cancel); 
    } 

    @Override 
    protected void onBindDialogView(View view) { 
     super.onBindDialogView(view); 
     initViews(view); 
    } 

    private void initViews(View view) { 
     sp_city = (Spinner) view.findViewById(R.id.spinner_poi_city); 
     sp_city.setPrompt("City"); 
     String[] arrayCity = new String[]{"Erie", "Pittsburgh", "Cleveland", "Buffalo", "Niagara Falls", "Jamestown"}; 
     adapter = new ArrayAdapter <> (this.getContext(), android.R.layout.simple_spinner_dropdown_item, arrayCity); 
     sp_city.setAdapter(adapter); 

     sp_city.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView <?> parentView, View selectedItemView, int position, long id) { 
       poiDialog.setCity(sp_city.getSelectedItem().toString()); 
      } 

      @Override 
      public void onNothingSelected(AdapterView <?> parentView) { 
      } 
     }); 
    } 

} 
+0

-vous ce que l'invite de spinner dans spinner android est? Je pense que vous êtes en train de le confondre avec le premier élément de spinner! –

Répondre

2

vous pouvez le faire de cette façon, je l'ai fait comme une way.it délicate vous aide à

private void initViews(View view) { 

sp_city = (Spinner) view.findViewById(R.id.spinner_poi_city); 

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item) { 

       @Override 
       public View getView(int position, View convertView, ViewGroup parent) { 

        View v = super.getView(position, convertView, parent); 
        if (position == getCount()) { 
         ((TextView) v.findViewById(android.R.id.text1)).setText(""); 
         ((TextView) v.findViewById(android.R.id.text1)).setHint(getItem(getCount())); //"Hint to be displayed" 
        } 
        return v; 
       } 

       @Override 
       public int getCount() { 
        return super.getCount() - 1; // you dont display last item. It is used as hint. 
       } 
      }; 
      adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
      adapter.add("Erie"); 
      adapter.add("Pittsburgh"); 
      adapter.add("Cleveland"); 
      adapter.add("Buffalo"); 
      adapter.add("Niagara Falls"); 
      adapter.add("Jamestown"); 
      adapter.add("Select City"); //This is the text that will be displayed as hint. 

      sp_city.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
       @Override 
       public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) { 
        String spinnerValue = String.valueOf(sp_city.getSelectedItem().toString()); 
        if (!spinnerValue.equalsIgnoreCase("Select City")) { 
         //do your code 
         Toast.makeText(this, sp_city.getSelectedItem().toString(), Toast.LENGTH_LONG).show(); 
        } 
       } 
       @Override 
       public void onNothingSelected(AdapterView<?> parentView) { 
       } 
      }); 

      sp_city.setAdapter(adapter); 
      sp_city.setSelection(adapter.getCount()); //set the hint the default selection so it appears on launch. 
     } 
+0

Qu'est-ce que 'android.R.id.text1'? –

0

Je pense que la meilleure solution consiste à utiliser comme premier élément du tableau "Sélectionnez la ville" des thats vous ajouterez à spinner. Donc, par défaut, il affichera Sélectionner une ville. Et vous pouvez vérifier si la ville est sélectionnée ou non en vérifiant la position sélectionnée de spinner. Si la position est 0, montrer un toast ou quelque chose du genre "Veuillez sélectionner une ville".

+0

Si vous pouvez faire de cette façon spinner a un affichage de valeur supplémentaire comme "select city". aussi quand vous montrez des toasts comme "S'il vous plaît choisir la ville". il s'affichera chaque fois par défaut au niveau initial. –

+0

Non. Vous pouvez utiliser setOnItemClickListener après le réglage de l'adaptateur. Et d'autre part, vous n'avez pas besoin de définir sur l'écouteur de clic d'élément, juste obtenir la position de spinner par getSlectedItemPosition avant de faire une certaine action. –

+0

ya que je sais cela mais j'ai des inquiétudes concernant cette première valeur sélectionner la ville toujours là dans la liste de spinner.that est la mauvaise façon de montrer aux utilisateurs. –

0

Vous confondez rapide avec un texte par défaut. Tapez sur la roulette et vous verrez "sélectionner Ville" comme titre

Invite est utilisé pour afficher le titre dans la liste déroulante pas pour le texte par défaut.

Si vous souhaitez sélectionner la valeur par défaut sur le tourniquet lorsque vous n'avez sélectionné aucune valeur dans la liste déroulante du tourniquet. Ensuite, vous devez utiliser

NothingSelectedSpinnerAdapter

How to make an Android Spinner with initial text "Select One"